]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Merged work on Temp_SpaceResolution branch into trunk (-r 320826:327988).
authorJeremias Maerki <jeremias@apache.org>
Mon, 24 Oct 2005 09:21:26 +0000 (09:21 +0000)
committerJeremias Maerki <jeremias@apache.org>
Mon, 24 Oct 2005 09:21:26 +0000 (09:21 +0000)
Source: http://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_SpaceResolution/

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

113 files changed:
src/java/org/apache/fop/datatypes/SimplePercentBaseContext.java
src/java/org/apache/fop/datatypes/ValidationPercentBaseContext.java [new file with mode: 0644]
src/java/org/apache/fop/fo/FONode.java
src/java/org/apache/fop/fo/flow/Table.java
src/java/org/apache/fop/fo/flow/TableFObj.java
src/java/org/apache/fop/layoutmgr/AbstractBreaker.java
src/java/org/apache/fop/layoutmgr/AreaAdditionUtil.java
src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java
src/java/org/apache/fop/layoutmgr/BorderElement.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/BorderOrPaddingElement.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/BreakElement.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/ConditionalElementListener.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/ElementListUtils.java
src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java
src/java/org/apache/fop/layoutmgr/FootnoteBodyLayoutManager.java
src/java/org/apache/fop/layoutmgr/KnuthElement.java
src/java/org/apache/fop/layoutmgr/KnuthPossPosIter.java
src/java/org/apache/fop/layoutmgr/KnuthSequence.java
src/java/org/apache/fop/layoutmgr/LayoutContext.java
src/java/org/apache/fop/layoutmgr/ListElement.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/PaddingElement.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java
src/java/org/apache/fop/layoutmgr/PageSequenceLayoutManager.java
src/java/org/apache/fop/layoutmgr/PositionIterator.java
src/java/org/apache/fop/layoutmgr/RelSide.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/SpaceElement.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/SpaceResolver.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java
src/java/org/apache/fop/layoutmgr/TraitSetter.java
src/java/org/apache/fop/layoutmgr/UnresolvedListElement.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/UnresolvedListElementWithLength.java [new file with mode: 0644]
src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java
src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java
src/java/org/apache/fop/layoutmgr/table/TableStepper.java
src/java/org/apache/fop/render/AbstractRenderer.java
src/java/org/apache/fop/traits/MinOptMax.java
test/fotree/testcases/shorthand-prop-mix.fo [new file with mode: 0644]
test/fotree/testcases/table_border-separation.fo [new file with mode: 0644]
test/java/org/apache/fop/fotreetest/ext/AssertElement.java
test/java/org/apache/fop/logging/LoggingElementListObserver.java
test/layoutengine/disabled-testcases.txt
test/layoutengine/testcases/block-container_display-align_space-before.xml
test/layoutengine/testcases/block-container_space-before_space-after_1.xml [new file with mode: 0644]
test/layoutengine/testcases/block-container_space-before_space-after_2.xml [new file with mode: 0644]
test/layoutengine/testcases/block-container_space-before_space-after_3.xml [new file with mode: 0644]
test/layoutengine/testcases/block_border_padding.xml
test/layoutengine/testcases/block_margin.xml
test/layoutengine/testcases/block_margin_inherit.xml
test/layoutengine/testcases/block_margin_percentages.xml
test/layoutengine/testcases/block_margin_shorthands.xml
test/layoutengine/testcases/block_padding_2.xml
test/layoutengine/testcases/block_space-before_space-after_1.xml
test/layoutengine/testcases/block_space-before_space-after_2.xml
test/layoutengine/testcases/block_space-before_space-after_3.xml
test/layoutengine/testcases/block_space-before_space-after_4.xml [new file with mode: 0644]
test/layoutengine/testcases/block_space-before_space-after_5.xml [new file with mode: 0644]
test/layoutengine/testcases/block_space-before_space-after_6.xml [new file with mode: 0644]
test/layoutengine/testcases/block_space-before_space-after_7.xml [new file with mode: 0644]
test/layoutengine/testcases/block_space-before_space-after_8.xml [new file with mode: 0644]
test/layoutengine/testcases/block_space-before_space-after_9.xml [new file with mode: 0644]
test/layoutengine/testcases/block_space-before_space-after_9a.xml [new file with mode: 0644]
test/layoutengine/testcases/character_border_padding.xml
test/layoutengine/testcases/character_vertical-align.xml
test/layoutengine/testcases/footnote_space-resolution.xml [new file with mode: 0644]
test/layoutengine/testcases/inline_alignment-adjust_1.xml
test/layoutengine/testcases/inline_alignment-adjust_2.xml
test/layoutengine/testcases/inline_alignment-baseline_1.xml
test/layoutengine/testcases/inline_alignment-baseline_2.xml
test/layoutengine/testcases/inline_alignment-baseline_3.xml
test/layoutengine/testcases/inline_alignment-baseline_4.xml
test/layoutengine/testcases/inline_background-color.xml
test/layoutengine/testcases/inline_baseline-shift_1.xml
test/layoutengine/testcases/inline_baseline-shift_2.xml
test/layoutengine/testcases/inline_baseline-shift_3.xml
test/layoutengine/testcases/inline_baseline-shift_4.xml
test/layoutengine/testcases/inline_border_padding.xml
test/layoutengine/testcases/inline_border_padding_block_nested_1.xml
test/layoutengine/testcases/inline_border_padding_block_nested_2.xml
test/layoutengine/testcases/inline_border_padding_conditionality_1.xml
test/layoutengine/testcases/inline_border_padding_conditionality_2.xml
test/layoutengine/testcases/inline_border_padding_hyphenate.xml
test/layoutengine/testcases/inline_border_padding_hyphenate_de.xml
test/layoutengine/testcases/inline_dominant-baseline_1.xml
test/layoutengine/testcases/inline_dominant-baseline_2.xml
test/layoutengine/testcases/inline_dominant-baseline_3.xml
test/layoutengine/testcases/inline_vertical-align_1.xml
test/layoutengine/testcases/inline_vertical-align_2.xml
test/layoutengine/testcases/leader_border_padding.xml
test/layoutengine/testcases/list-block_border_padding.xml
test/layoutengine/testcases/list-block_space-before_space-after_1.xml [new file with mode: 0644]
test/layoutengine/testcases/list-block_space-before_space-after_2.xml [new file with mode: 0644]
test/layoutengine/testcases/list-item_space-before_space-after_1.xml
test/layoutengine/testcases/list-item_space-before_space-after_2.xml
test/layoutengine/testcases/list-item_space-before_space-after_3.xml [new file with mode: 0644]
test/layoutengine/testcases/page-breaking_2.xml
test/layoutengine/testcases/page-number-citation_border_padding.xml
test/layoutengine/testcases/page-number-citation_vertical-align.xml
test/layoutengine/testcases/page-number_border_padding.xml
test/layoutengine/testcases/page-number_vertical-align.xml
test/layoutengine/testcases/region_side_space-resolution.xml [new file with mode: 0644]
test/layoutengine/testcases/table-cell_block_margin_percentage.xml
test/layoutengine/testcases/table-cell_border_padding_conditionality.xml [new file with mode: 0644]
test/layoutengine/testcases/table_border_padding_2.xml [new file with mode: 0644]
test/layoutengine/testcases/table_margin_space-before_space-after.xml
test/layoutengine/testcases/table_space-before_space-after_1.xml [new file with mode: 0644]
test/layoutengine/testcases/table_space-before_space-after_2.xml [new file with mode: 0644]
test/layoutengine/testcases/table_table-layout_fixed_1.xml

index 8b0688fe16522f71579a73b64f5546d7aa324b63..4a3f262274bb30a7bb7ba0aa34552784f76566f4 100644 (file)
@@ -31,7 +31,8 @@ public class SimplePercentBaseContext implements PercentBaseContext {
 
     /**
      * @param parentContext the context to be used for all percentages other than lengthBase
-     * @param lengthBase the particular percentage length base for which this context provides a value
+     * @param lengthBase the particular percentage length base for which this context provides 
+     *                   a value
      * @param lengthBaseValue the value to be returned for requests to the given lengthBase
      */
     public SimplePercentBaseContext(PercentBaseContext parentContext,
diff --git a/src/java/org/apache/fop/datatypes/ValidationPercentBaseContext.java b/src/java/org/apache/fop/datatypes/ValidationPercentBaseContext.java
new file mode 100644 (file)
index 0000000..6d3e8fa
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * 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: SimplePercentBaseContext.java 279656 2005-09-08 22:06:48Z pietsch $ */
+
+package org.apache.fop.datatypes;
+
+import org.apache.fop.fo.FObj;
+
+/**
+ * This base context is used during validation when the actual base values are still unknown
+ * but should still already be checked. The actual value returned is not so important in this
+ * case. But it's important that zero and non-zero values can be distinguished.
+ * <p>
+ * Example: A table with collapsing border model has no padding. The Table FO should be able 
+ * to check if non-zero values (even percentages) have been specified.
+ */
+public final class ValidationPercentBaseContext implements PercentBaseContext {
+    
+    /**
+     * Main constructor.
+     */
+    private ValidationPercentBaseContext() {
+    }
+
+    /**
+     * Returns the value for the given lengthBase.
+     * @see org.apache.fop.datatypes.PercentBaseContext#getBaseLength(int, FObj)
+     */
+    public int getBaseLength(int lengthBase, FObj fobj) {
+        //Simply return a dummy value which produces a non-zero value when a non-zero percentage
+        //was specified.
+        return 100000;
+    }
+
+    private static PercentBaseContext pseudoContextForValidation = null;
+    
+    /** @return a base context for validation purposes. See class description. */
+    public static PercentBaseContext getPseudoContextForValidationPurposes() {
+        if (pseudoContextForValidation == null) {
+            pseudoContextForValidation = new ValidationPercentBaseContext();
+        }
+        return pseudoContextForValidation;
+    }
+    
+}
index 86011004e78e3d41919d5cd704ab07c4c9746587..a142b9e3e61b8003f15c5d4682fb5931772adf4c 100644 (file)
@@ -311,7 +311,7 @@ public abstract class FONode implements Cloneable {
      * @param problem text to display that indicates the problem
      */
     protected void attributeWarning(String problem) {
-        log.warn(errorText(locator) + getName() + ", " + problem);
+        log.warn(warningText(locator) + getName() + ", " + problem);
     }
 
     /**
@@ -437,7 +437,7 @@ public abstract class FONode implements Cloneable {
      * @param loc org.xml.sax.Locator object
      * @return String the formatted text
      */
-    protected static String getLocatorString(Locator loc) {
+    public static String getLocatorString(Locator loc) {
         if (loc == null) {
             return "Unknown location";
         } else {
index 47047d41f1887c4b7116eebcf4c9a2e9c3f2ba47..e0845612764aa427eea14d2cdf14e9ca74e4985f 100644 (file)
@@ -24,9 +24,8 @@ import java.util.List;
 import org.xml.sax.Locator;
 
 import org.apache.fop.apps.FOPException;
-import org.apache.fop.datatypes.Numeric;
+import org.apache.fop.datatypes.ValidationPercentBaseContext;
 import org.apache.fop.fo.FONode;
-import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
 import org.apache.fop.fo.StaticPropertyList;
 import org.apache.fop.fo.ValidationException;
@@ -129,17 +128,19 @@ public class Table extends TableFObj {
         colPList.setWritingMode();
         defaultColumn.bind(colPList);
 
-        /*if (borderCollapse != EN_SEPARATE && commonBorderPaddingBackground.hasPadding()) {
-            //See "17.6.2 The collapsing border model" in CSS2
-            getLogger().warn("Table may not have padding when using the collapsing "
-                    + "border model. Padding will be ignored.");
-        }*/
         if (borderCollapse != EN_SEPARATE) {
-            getLogger().warn("The collapsing border model on an fo:table "
+            attributeWarning("The collapsing border model on an fo:table "
                     + "is currently not supported by FOP");
         }
         if (tableLayout == EN_AUTO) {
-            getLogger().warn("table-layout=\"auto\" is currently not supported by FOP");
+            attributeWarning("table-layout=\"auto\" is currently not supported by FOP");
+        }
+        if (!isSeparateBorderModel() && getCommonBorderPaddingBackground().hasPadding(
+                ValidationPercentBaseContext.getPseudoContextForValidationPurposes())) {
+            //See "17.6.2 The collapsing border model" in CSS2
+            attributeWarning("In collapsing border model a table does not have padding"
+                    + " (see http://www.w3.org/TR/REC-CSS2/tables.html#collapsing-borders)"
+                    + ", but a non-zero value for padding was found. The padding will be ignored.");
         }
     }
 
@@ -217,11 +218,11 @@ public class Table extends TableFObj {
      * @see org.apache.fop.fo.FONode#addChildNode(FONode)
      */
     protected void addChildNode(FONode child) throws FOPException {
-        if (child.getName().equals("fo:table-column")) {
+        if ("fo:table-column".equals(child.getName())) {
             addColumnNode((TableColumn) child);
-        } else if (child.getName().equals("fo:table-footer")) {
+        } else if ("fo:table-footer".equals(child.getName())) {
             tableFooter = (TableBody)child;
-        } else if (child.getName().equals("fo:table-header")) {
+        } else if ("fo:table-header".equals(child.getName())) {
             tableHeader = (TableBody)child;
         } else {
             // add bodies
index 11f4c3295a0a0dadc77380936648b55d3148bd21..db95871e5cce7451c806fef3f50098dabccf1a45 100644 (file)
@@ -20,6 +20,7 @@ package org.apache.fop.fo.flow;
 
 import org.apache.fop.apps.FOPException;
 import org.apache.fop.datatypes.Numeric;
+import org.apache.fop.datatypes.ValidationPercentBaseContext;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FObj;
 import org.apache.fop.fo.PropertyList;
@@ -27,9 +28,7 @@ import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 
 /**
  * Superclass for table-related FOs
- *
  */
-
 public abstract class TableFObj extends FObj {
 
     private Numeric borderAfterPrecedence;
@@ -82,8 +81,17 @@ public abstract class TableFObj extends FObj {
         if (getNameId() != FO_TABLE && getNameId() != FO_TABLE_CELL
                 && getTable().isSeparateBorderModel()
                 && getCommonBorderPaddingBackground().hasBorderInfo()) {
-            getLogger().warn("Borders on " + getName() 
-                    + " non-applicable for table with border-collapse=\"separate\"");
+            attributeWarning("In the separate border model (border-collapse=\"separate\")"
+                    + ", borders cannot be specified on a " + getName() 
+                    + ", but a non-zero value for border was found. The border will be ignored. ");
+        }
+        if (getNameId() != FO_TABLE //Separate check for fo:table in Table.java
+                && getNameId() != FO_TABLE_CELL
+                && getCommonBorderPaddingBackground().hasPadding(
+                        ValidationPercentBaseContext.getPseudoContextForValidationPurposes())) {
+            attributeWarning(getName() + " does not have padding"
+                    + " (see the property list for " + getName() + " in XSL 1.0)"
+                    + ", but a non-zero value for padding was found. The padding will be ignored.");
         }
     }
     
index 74df8e188f3121b2e5d46921f3410f0ee20a5f41..743d305741cc30180f019fb4e6576219abb6f3d4 100644 (file)
@@ -76,8 +76,8 @@ public abstract class AbstractBreaker {
             return this.startOn;
         }
 
-        public BlockSequence endBlockSequence() {
-            KnuthSequence temp = super.endSequence();
+        public BlockSequence endBlockSequence(Position breakPosition) {
+            KnuthSequence temp = super.endSequence(breakPosition);
             if (temp != null) {
                 BlockSequence returnSequence = new BlockSequence(startOn);
                 returnSequence.addAll(temp);
@@ -273,6 +273,7 @@ public abstract class AbstractBreaker {
         ListIterator effectiveListIterator = effectiveList.listIterator();
         int startElementIndex = 0;
         int endElementIndex = 0;
+        int lastBreak = -1;
         for (int p = 0; p < partCount; p++) {
             PageBreakPosition pbp = (PageBreakPosition) alg.getPageBreaks().get(p);
 
@@ -307,6 +308,10 @@ public abstract class AbstractBreaker {
             
             int displayAlign = getCurrentDisplayAlign();
             
+            //The following is needed by SpaceResolver.performConditionalsNotification()
+            //further down as there may be important Position elements in the element list trailer
+            int notificationEndElementIndex = endElementIndex;
+
             // ignore the last elements added by the
             // PageSequenceLayoutManager
             endElementIndex -= (endElementIndex == (originalList.size() - 1)) 
@@ -328,12 +333,13 @@ public abstract class AbstractBreaker {
             while (effectiveListIterator.hasNext()
                     && !(firstElement = (KnuthElement) effectiveListIterator.next())
                             .isBox()) {
-                if (firstElement.isGlue()) {
+                /*
+                if (firstElement.isGlue() && firstElement.getLayoutManager() != null) {
                     // discard the space representd by the glue element
                     ((BlockLevelLayoutManager) firstElement
                             .getLayoutManager())
                             .discardSpace((KnuthGlue) firstElement);
-                }
+                }*/
                 startElementIndex++;
             }
 
@@ -377,6 +383,11 @@ public abstract class AbstractBreaker {
                 }
                 /* *** *** non-standard extension *** *** */
 
+                // Handle SpaceHandling(Break)Positions, see SpaceResolver!
+                SpaceResolver.performConditionalsNotification(effectiveList, 
+                        startElementIndex, notificationEndElementIndex, lastBreak);
+                
+                // Add areas now!
                 addAreas(new KnuthPossPosIter(effectiveList,
                         startElementIndex, endElementIndex + 1), childLC);
             } else {
@@ -386,10 +397,18 @@ public abstract class AbstractBreaker {
 
             finishPart(alg, pbp);
 
+            lastBreak = endElementIndex;
             startElementIndex = pbp.getLeafPos() + 1;
         }
     }
-    
+    /**
+     * Notifies the layout managers about the space and conditional length situation based on
+     * the break decisions.
+     * @param effectiveList Element list to be painted
+     * @param startElementIndex start index of the part
+     * @param endElementIndex end index of the part
+     * @param lastBreak index of the last break element
+     */
     /**
      * Handles span changes reported through the <code>LayoutContext</code>. 
      * Only used by the PSLM and called by <code>getNextBlockList()</code>.
@@ -425,10 +444,12 @@ public abstract class AbstractBreaker {
             //Only implemented by the PSLM
             nextSequenceStartsOn = handleSpanChange(childLC, nextSequenceStartsOn);
             
+            Position breakPosition = null;
             if (((KnuthElement) returnedList.getLast()).isPenalty()
                     && ((KnuthPenalty) returnedList.getLast()).getP() == -KnuthElement.INFINITE) {
                 KnuthPenalty breakPenalty = (KnuthPenalty) returnedList
                         .removeLast();
+                breakPosition = breakPenalty.getPosition();
                 switch (breakPenalty.getBreakClass()) {
                 case Constants.EN_PAGE:
                     log.debug("PLM> break - PAGE");
@@ -454,7 +475,7 @@ public abstract class AbstractBreaker {
             }
             blockList.addAll(returnedList);
             BlockSequence seq = null;
-            seq = blockList.endBlockSequence();
+            seq = blockList.endBlockSequence(breakPosition);
             if (seq != null) {
                 blockLists.add(seq);
             }
index 44ad1496bf300c73e32f5d5835b6964821dfec7d..a210754afd67c999d05ab66a4f29bb432db98be0 100644 (file)
@@ -21,6 +21,11 @@ package org.apache.fop.layoutmgr;
 import java.util.Iterator;
 import java.util.LinkedList;
 
+import org.apache.fop.layoutmgr.SpaceResolver.SpaceHandlingBreakPosition;
+
+/**
+ * Utility class which provides common code for the addAreas stage.
+ */
 public class AreaAdditionUtil {
 
     private static class StackingIter extends PositionIterator {
@@ -37,6 +42,12 @@ public class AreaAdditionUtil {
         }
     }
 
+    /**
+     * Creates the child areas for the given layout manager.
+     * @param bslm the BlockStackingLayoutManager instance for which "addAreas" is performed.
+     * @param parentIter the position iterator
+     * @param layoutContext the layout context
+     */
     public static void addAreas(BlockStackingLayoutManager bslm, 
             PositionIterator parentIter, LayoutContext layoutContext) {
         LayoutManager childLM = null;
@@ -52,6 +63,9 @@ public class AreaAdditionUtil {
         Position pos;
         while (parentIter.hasNext()) {
             pos = (Position)parentIter.next();
+            if (pos == null) {
+                continue;
+            }
             if (pos.getIndex() >= 0) {
                 if (firstPos == null) {
                     firstPos = pos;
@@ -65,12 +79,14 @@ public class AreaAdditionUtil {
                 if (firstLM == null) {
                     firstLM = lastLM;
                 }
+            } else if (pos instanceof SpaceHandlingBreakPosition) {
+                positionList.add(pos);
             } else {
                 // pos was created by this LM, so it must be ignored
             }
         }
         
-        if (bslm.markers != null) {
+        if (bslm != null && bslm.markers != null) {
             bslm.getCurrentPV().addMarkers(bslm.markers, true, 
                     bslm.isFirst(firstPos), bslm.isLast(lastPos));
         }
@@ -91,7 +107,7 @@ public class AreaAdditionUtil {
             lc.setStackLimit(layoutContext.getStackLimit());
             childLM.addAreas(childPosIter, lc);
         }
-        if (bslm.markers != null) {
+        if (bslm != null && bslm.markers != null) {
             bslm.getCurrentPV().addMarkers(bslm.markers, false, 
                     bslm.isFirst(firstPos), bslm.isLast(lastPos));
         }
index 55dd12ddee1579556f20be68100fa49ed9775c7e..50281ef448f71fe1556c86968f520eeed8ea26c0 100644 (file)
@@ -39,7 +39,8 @@ import org.apache.fop.traits.SpaceVal;
 /**
  * LayoutManager for a block-container FO.
  */
-public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
+public class BlockContainerLayoutManager extends BlockStackingLayoutManager 
+                implements ConditionalElementListener {
     
     private BlockViewport viewportBlockArea;
     private Block referenceArea;
@@ -68,6 +69,14 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
     private MinOptMax foBlockSpaceBefore;
     private MinOptMax foBlockSpaceAfter;
     
+    private boolean discardBorderBefore;
+    private boolean discardBorderAfter;
+    private boolean discardPaddingBefore;
+    private boolean discardPaddingAfter;
+    private MinOptMax effSpaceBefore;
+    private MinOptMax effSpaceAfter;
+
+    
     /**
      * Create a new block container layout manager.
      * @param node block-container node to create the layout manager for.
@@ -76,6 +85,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         super(node);
     }
     
+    /** @see org.apache.fop.layoutmgr.LayoutManager#initialize() */
     public void initialize() {
         abProps = getBlockContainerFO().getCommonAbsolutePosition();
         foBlockSpaceBefore = new SpaceVal(getBlockContainerFO().getCommonMarginBlock()
@@ -111,6 +121,15 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                 .spaceAfter.getSpace().getMinimum(this).getLength().getValue(this);
         }
     }
+    
+    private void resetSpaces() {
+        this.discardBorderBefore = false;        
+        this.discardBorderAfter = false;        
+        this.discardPaddingBefore = false;        
+        this.discardPaddingAfter = false;
+        this.effSpaceBefore = foSpaceBefore;
+        this.effSpaceAfter = foSpaceAfter;
+    }
 
     /** @return the content IPD */
     protected int getRotatedIPD() {
@@ -151,6 +170,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
     
     /** @see org.apache.fop.layoutmgr.LayoutManager */
     public LinkedList getNextKnuthElements(LayoutContext context, int alignment) {
+        resetSpaces();
         if (isAbsoluteOrFixed()) {
             return getNextKnuthElementsAbsolute(context, alignment);
         }
@@ -201,7 +221,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         
         if (!bBreakBeforeServed) {
             try {
-                if (addKnuthElementsForBreakBefore(returnList)) {
+                if (addKnuthElementsForBreakBefore(returnList, context)) {
                     return returnList;
                 }
             } finally {
@@ -209,18 +229,20 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
             }
         }
 
-        if (!bSpaceBeforeServed) {
-            addKnuthElementsForSpaceBefore(returnList, alignment);
-            bSpaceBeforeServed = true;
-        }
+        addKnuthElementsForSpaceBefore(returnList, alignment);
         
-        addKnuthElementsForBorderPaddingBefore(returnList);
+        addKnuthElementsForBorderPaddingBefore(returnList, !firstVisibleMarkServed);
+        firstVisibleMarkServed = true;
 
         if (autoHeight) {
+            //Spaces, border and padding to be repeated at each break
+            addPendingMarks(context);
+
             BlockLevelLayoutManager curLM; // currently active LM
             BlockLevelLayoutManager prevLM = null; // previously active LM
             while ((curLM = (BlockLevelLayoutManager) getChildLM()) != null) {
                 LayoutContext childLC = new LayoutContext(0);
+                childLC.copyPendingMarksFrom(context);
                 // curLM is a ?
                 childLC.setStackLimit(MinOptMax.subtract(context
                         .getStackLimit(), stackLimit));
@@ -230,10 +252,9 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                 // get elements from curLM
                 returnedList = curLM.getNextKnuthElements(childLC, alignment);
                 if (returnedList.size() == 1
-                        && ((KnuthElement)returnedList.getFirst()).isPenalty()
-                        && ((KnuthPenalty)returnedList.getFirst()).getP() 
-                                == -KnuthElement.INFINITE) {
+                        && ((KnuthElement)returnedList.getFirst()).isForcedBreak()) {
                     // a descendant of this block has break-before
+                    /*
                     if (returnList.size() == 0) {
                         // the first child (or its first child ...) has
                         // break-before;
@@ -241,7 +262,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                         // the
                         // following page
                         bSpaceBeforeServed = false;
-                    }
+                    }*/
                     contentList.addAll(returnedList);
 
                     // "wrap" the Position inside each element
@@ -259,13 +280,17 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                                 || curLM.mustKeepWithPrevious()) {
                             // add an infinite penalty to forbid a break between
                             // blocks
-                            contentList.add(new KnuthPenalty(0,
-                                    KnuthElement.INFINITE, false,
-                                    new Position(this), false));
+                            contentList.add(new BreakElement(
+                                    new Position(this), KnuthElement.INFINITE, context));
+                            //contentList.add(new KnuthPenalty(0,
+                            //        KnuthElement.INFINITE, false,
+                            //        new Position(this), false));
                         } else if (!((KnuthElement) contentList.getLast()).isGlue()) {
                             // add a null penalty to allow a break between blocks
-                            contentList.add(new KnuthPenalty(0, 0, false,
-                                    new Position(this), false));
+                            contentList.add(new BreakElement(
+                                    new Position(this), 0, context));
+                            //contentList.add(new KnuthPenalty(0, 0, false,
+                            //        new Position(this), false));
                         } else {
                             // the last element in contentList is a glue;
                             // it is a feasible breakpoint, there is no need to add
@@ -277,9 +302,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                         //Avoid NoSuchElementException below (happens with empty blocks)
                         continue;
                     }
-                    if (((KnuthElement) returnedList.getLast()).isPenalty()
-                            && ((KnuthPenalty) returnedList.getLast()).getP() 
-                                    == -KnuthElement.INFINITE) {
+                    if (((ListElement)returnedList.getLast()).isForcedBreak()) {
                         // a descendant of this block has break-after
                         if (curLM.isFinished()) {
                             // there is no other content in this block;
@@ -328,9 +351,9 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                 }
             }
         }
-        addKnuthElementsForBorderPaddingAfter(returnList);
+        addKnuthElementsForBorderPaddingAfter(returnList, true);
         addKnuthElementsForSpaceAfter(returnList, alignment);
-        addKnuthElementsForBreakAfter(returnList);
+        addKnuthElementsForBreakAfter(returnList, context);
 
         setFinished(true);
         return returnList;
@@ -422,7 +445,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         contentRectOffsetX += getBlockContainerFO()
                 .getCommonMarginBlock().startIndent.getValue(this);
         double contentRectOffsetY = offset.getY();
-        contentRectOffsetY += getSpaceBefore();
+        contentRectOffsetY += getSpaceBefore(); //TODO Uhm, is that necessary?
         contentRectOffsetY += getBlockContainerFO()
                 .getCommonBorderPaddingBackground().getBorderBeforeWidth(false);
         contentRectOffsetY += getBlockContainerFO()
@@ -544,9 +567,9 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                 }
                 if (returnedList != null) {
                     bclm.wrapPositionElements(returnedList, returnList);
-                    //returnList.addAll(returnedList);
                 }
             }
+            SpaceResolver.resolveElementList(returnList);
             setFinished(true);
             return returnList;
         }
@@ -605,9 +628,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         return new Point(x, y);
     }
     
-    /**
-     * @see org.apache.fop.layoutmgr.LayoutManager#addAreas(org.apache.fop.layoutmgr.PositionIterator, org.apache.fop.layoutmgr.LayoutContext)
-     */
+    /** @see org.apache.fop.layoutmgr.LayoutManager */
     public void addAreas(PositionIterator parentIter,
             LayoutContext layoutContext) {
         getParentArea(null);
@@ -766,11 +787,6 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                 //}
             }
     
-            // if adjusted space before
-            if (bSpaceBefore) {
-                addBlockSpacing(0, new MinOptMax(adjustedSpaceBefore));
-            }
-    
             while ((childLM = childPosIter.getNextChildLM()) != null) {
                 // set last area flag
                 lc.setFlags(LayoutContext.LAST_AREA,
@@ -780,30 +796,21 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
                 childLM.addAreas(childPosIter, lc);
             }
         } else {
-            // if adjusted space before
-            if (bSpaceBefore) {
-                addBlockSpacing(0, new MinOptMax(adjustedSpaceBefore));
-            }
             //Add child areas inside the reference area
             bcpos.getBreaker().addContainedAreas();
         }
 
-        //int bIndents = getBlockContainerFO().getCommonBorderPaddingBackground()
-        //    .getBPPaddingAndBorder(false);
-
         if (markers != null) {
             getCurrentPV().addMarkers(markers, false, isFirst(firstPos), isLast(lastPos));
         }
 
+        TraitSetter.addSpaceBeforeAfter(viewportBlockArea, layoutContext.getSpaceAdjust(), 
+                effSpaceBefore, effSpaceAfter);
         flush();
 
-        // if adjusted space after
-        if (bSpaceAfter) {
-            addBlockSpacing(0, new MinOptMax(adjustedSpaceAfter));
-        }
-
         viewportBlockArea = null;
         referenceArea = null;
+        resetSpaces();
     }
     
     /**
@@ -826,7 +833,11 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
 
             TraitSetter.setProducerID(viewportBlockArea, getBlockContainerFO().getId());
             TraitSetter.addBorders(viewportBlockArea, 
-                    getBlockContainerFO().getCommonBorderPaddingBackground(), this);
+                    getBlockContainerFO().getCommonBorderPaddingBackground(), 
+                    discardBorderBefore, discardBorderAfter, false, false, this);
+            TraitSetter.addPadding(viewportBlockArea, 
+                    getBlockContainerFO().getCommonBorderPaddingBackground(), 
+                    discardPaddingBefore, discardPaddingAfter, false, false, this);
             // TraitSetter.addBackground(viewportBlockArea, 
             //        getBlockContainerFO().getCommonBorderPaddingBackground(),
             //        this);
@@ -918,17 +929,13 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
         }
     }
 
-    /**
-     * @see org.apache.fop.layoutmgr.BlockLevelLayoutManager#negotiateBPDAdjustment(int, org.apache.fop.layoutmgr.KnuthElement)
-     */
+    /** @see org.apache.fop.layoutmgr.BlockLevelLayoutManager */
     public int negotiateBPDAdjustment(int adj, KnuthElement lastElement) {
         // TODO Auto-generated method stub
         return 0;
     }
 
-    /**
-     * @see org.apache.fop.layoutmgr.BlockLevelLayoutManager#discardSpace(org.apache.fop.layoutmgr.KnuthGlue)
-     */
+    /** @see org.apache.fop.layoutmgr.BlockLevelLayoutManager */
     public void discardSpace(KnuthGlue spaceGlue) {
         // TODO Auto-generated method stub
         
@@ -982,6 +989,51 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager {
     public boolean getGeneratesBlockArea() {
         return true;
     }
-   
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifySpace(RelSide side, MinOptMax effectiveLength) {
+        if (RelSide.BEFORE == side) {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceBefore + "-> " + effectiveLength);
+            }
+            this.effSpaceBefore = effectiveLength;
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceAfter + "-> " + effectiveLength);
+            }
+            this.effSpaceAfter = effectiveLength;
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyBorder(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardBorderBefore = true;
+            } else {
+                this.discardBorderAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Border " + side + " -> " + effectiveLength);
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyPadding(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardPaddingBefore = true;
+            } else {
+                this.discardPaddingAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Padding " + side + " -> " + effectiveLength);
+        }
+    }
+
 }
 
index d353727e453496e96e7ea9ff24e8a2fae52d91b2..838e23cfb15f778b8c16d6c9edcb2447f5062417 100644 (file)
@@ -35,7 +35,8 @@ import org.apache.fop.traits.SpaceVal;
 /**
  * LayoutManager for a block FO.
  */
-public class BlockLayoutManager extends BlockStackingLayoutManager {
+public class BlockLayoutManager extends BlockStackingLayoutManager 
+            implements ConditionalElementListener {
     
     private Block curBlockArea;
 
@@ -46,6 +47,13 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
     private Length lineHeight;
     private int follow = 2000;
     private int middleShift = 0;
+    
+    private boolean discardBorderBefore;
+    private boolean discardBorderAfter;
+    private boolean discardPaddingBefore;
+    private boolean discardPaddingAfter;
+    private MinOptMax effSpaceBefore;
+    private MinOptMax effSpaceAfter;
 
     /** The list of child BreakPoss instances. */
     protected List childBreaks = new java.util.ArrayList();
@@ -87,6 +95,21 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
         }
     }
 
+    /** @see org.apache.fop.layoutmgr.BlockStackingLayoutManager */
+    public LinkedList getNextKnuthElements(LayoutContext context, int alignment) {
+        resetSpaces(); 
+        return super.getNextKnuthElements(context, alignment);
+    }
+   
+    private void resetSpaces() {
+        this.discardBorderBefore = false;        
+        this.discardBorderAfter = false;        
+        this.discardPaddingBefore = false;        
+        this.discardPaddingAfter = false;
+        this.effSpaceBefore = foSpaceBefore;
+        this.effSpaceAfter = foSpaceAfter;
+    }
+    
     /**
      * Proxy iterator for Block LM.
      * This iterator creates and holds the complete list
@@ -277,12 +300,6 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
         }
 
         getPSLM().addIDToPage(getBlockFO().getId());
-        /* TODO remove when markers are really ok
-        log.debug("Checking on " + this);
-        log.debug("Checking first=" + firstPos);
-        log.debug("Checking last=" + lastPos);
-        log.debug("->" + isFirst(firstPos) + "/" + isLast(lastPos));
-        */
         if (markers != null) {
             getCurrentPV().addMarkers(markers, true, isFirst(firstPos), isLast(lastPos));
         }
@@ -361,14 +378,6 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
             //}
         }
 
-        // if adjusted space before
-        double adjust = layoutContext.getSpaceAdjust();
-        addBlockSpacing(adjust, foSpaceBefore);
-        foSpaceBefore = null;
-        //if (bSpaceBefore) {
-        //    addBlockSpacing(0, new MinOptMax(adjustedSpaceBefore));
-        //}
-
         while ((childLM = childPosIter.getNextChildLM()) != null) {
             // set last area flag
             lc.setFlags(LayoutContext.LAST_AREA,
@@ -378,22 +387,16 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
             childLM.addAreas(childPosIter, lc);
         }
 
-        //int bIndents = getBlockFO().getCommonBorderPaddingBackground()
-        //                        .getBPPaddingAndBorder(false);
-
         if (markers != null) {
             getCurrentPV().addMarkers(markers, false, isFirst(firstPos), isLast(lastPos));
         }
 
+        TraitSetter.addSpaceBeforeAfter(curBlockArea, layoutContext.getSpaceAdjust(), 
+                effSpaceBefore, effSpaceAfter);
         flush();
 
-        // if adjusted space after
-        addBlockSpacing(adjust, foSpaceAfter);
-        //if (bSpaceAfter) {
-        //    addBlockSpacing(0, new MinOptMax(adjustedSpaceAfter));
-        //}
-
         curBlockArea = null;
+        resetSpaces();
     }
 
     /**
@@ -426,30 +429,16 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
             // set traits
             TraitSetter.setProducerID(curBlockArea, getBlockFO().getId());
             TraitSetter.addBorders(curBlockArea, 
-                    getBlockFO().getCommonBorderPaddingBackground(), this);
+                    getBlockFO().getCommonBorderPaddingBackground(), 
+                    discardBorderBefore, discardBorderAfter, false, false, this);
+            TraitSetter.addPadding(curBlockArea, 
+                    getBlockFO().getCommonBorderPaddingBackground(), 
+                    discardPaddingBefore, discardPaddingAfter, false, false, this);
             TraitSetter.addMargins(curBlockArea,
                     getBlockFO().getCommonBorderPaddingBackground(), 
                     getBlockFO().getCommonMarginBlock(),
                     this);
 
-            // Set up dimensions
-            // Get reference IPD from parentArea
-            //int referenceIPD = parentArea.getIPD();
-            //curBlockArea.setIPD(referenceIPD);
-
-            // Set the width of the block based on the parent block
-            // Need to be careful though, if parent is BC then width may not be set
-            /* TODO remove if really not used anymore
-            int parentwidth = 0;
-            if (parentArea instanceof BlockParent) {
-                parentwidth = ((BlockParent) parentArea).getIPD();
-            }
-            if (parentwidth == 0) {
-                parentwidth = referenceIPD;
-            }
-            parentwidth -= getIPIndents();
-            */
-
             setCurrentArea(curBlockArea); // ??? for generic operations
         }
         return curBlockArea;
@@ -533,6 +522,51 @@ public class BlockLayoutManager extends BlockStackingLayoutManager {
     public boolean getGeneratesBlockArea() {
         return true;
     }
-   
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifySpace(RelSide side, MinOptMax effectiveLength) {
+        if (RelSide.BEFORE == side) {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceBefore + "-> " + effectiveLength);
+            }
+            this.effSpaceBefore = effectiveLength;
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceAfter + "-> " + effectiveLength);
+            }
+            this.effSpaceAfter = effectiveLength;
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyBorder(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardBorderBefore = true;
+            } else {
+                this.discardBorderAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Border " + side + " -> " + effectiveLength);
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyPadding(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardPaddingBefore = true;
+            } else {
+                this.discardPaddingAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Padding " + side + " -> " + effectiveLength);
+        }
+    }
+
 }
 
index 084101ce4c0e923c5619e21fae8fc140062f66b3..b3ad7225b8a008f924b654b4485334ce1bbaf5b6 100644 (file)
@@ -53,12 +53,10 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
     protected int adjustedSpaceAfter = 0;
     /** Only used to store the original list when createUnitElements is called */
     protected LinkedList storedList = null;
-    /** FO node */
-    protected FObj fobj;
     /** Indicates whether break before has been served or not */
     protected boolean bBreakBeforeServed = false;
-    /** Indicates whether space before has been served or not */
-    protected boolean bSpaceBeforeServed = false;
+    /** Indicates whether the first visible mark has been returned by this LM, yet */
+    protected boolean firstVisibleMarkServed = false;
     /** Reference IPD available */
     protected int referenceIPD = 0;
     /**
@@ -84,7 +82,6 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
     public BlockStackingLayoutManager(FObj node) {
         super(node);
         setGeneratesBlockArea(true);
-        fobj = node;
     }
 
     /** 
@@ -103,16 +100,6 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
         this.parentArea = parentArea;
     }
 
-    protected MinOptMax resolveSpaceSpecifier(Area nextArea) {
-        SpaceSpecifier spaceSpec = new SpaceSpecifier(false);
-        // Area prevArea = getCurrentArea().getLast();
-        // if (prevArea != null) {
-        //     spaceSpec.addSpace(prevArea.getSpaceAfter());
-        // }
-        // spaceSpec.addSpace(nextArea.getSpaceBefore());
-        return spaceSpec.resolve(false);
-    }
-
     /**
      * Add a block spacer for space before and space after a block.
      * This adds an empty Block area that acts as a block space.
@@ -121,15 +108,7 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
      * @param minoptmax the min/opt/max value of the spacing
      */
     public void addBlockSpacing(double adjust, MinOptMax minoptmax) {
-        if (minoptmax == null) {
-            return;
-        }
-        int sp = minoptmax.opt;
-        if (adjust > 0) {
-            sp = sp + (int)(adjust * (minoptmax.max - minoptmax.opt));
-        } else {
-            sp = sp + (int)(adjust * (minoptmax.opt - minoptmax.min));
-        }
+        int sp = TraitSetter.getEffectiveSpace(adjust, minoptmax);
         if (sp != 0) {
             Block spacer = new Block();
             spacer.setBPD(sp);
@@ -153,7 +132,6 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
             //log.error("Child not a Block in BlockStackingLM!");
         }
 
-        MinOptMax spaceBefore = resolveSpaceSpecifier(childArea);
         parentArea.addBlock((Block) childArea);
         flush(); // hand off current area to parent
     }
@@ -232,7 +210,7 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
 
         if (!bBreakBeforeServed) {
             try {
-                if (addKnuthElementsForBreakBefore(returnList)) {
+                if (addKnuthElementsForBreakBefore(returnList, context)) {
                     return returnList;
                 }
             } finally {
@@ -240,15 +218,17 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
             }
         }
 
-        if (!bSpaceBeforeServed) {
-            addKnuthElementsForSpaceBefore(returnList, alignment);
-            bSpaceBeforeServed = true;
-        }
+        addKnuthElementsForSpaceBefore(returnList, alignment);
         
-        addKnuthElementsForBorderPaddingBefore(returnList);
+        addKnuthElementsForBorderPaddingBefore(returnList, !firstVisibleMarkServed);
+        firstVisibleMarkServed = true;
+
+        //Spaces, border and padding to be repeated at each break
+        addPendingMarks(context);
         
         while ((curLM = (BlockLevelLayoutManager) getChildLM()) != null) {
             LayoutContext childLC = new LayoutContext(0);
+            childLC.copyPendingMarksFrom(context);
             if (curLM instanceof LineLayoutManager) {
                 // curLM is a LineLayoutManager
                 // set stackLimit for lines
@@ -273,9 +253,9 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
             }
             if (returnedList != null
                     && returnedList.size() == 1
-                    && ((KnuthElement) returnedList.getFirst()).isPenalty()
-                    && ((KnuthPenalty) returnedList.getFirst()).getP() == -KnuthElement.INFINITE) {
+                    && ((ListElement) returnedList.getFirst()).isForcedBreak()) {
                 // a descendant of this block has break-before
+                /*
                 if (returnList.size() == 0) {
                     // the first child (or its first child ...) has
                     // break-before;
@@ -283,7 +263,7 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                     // the
                     // following page
                     bSpaceBeforeServed = false;
-                }
+                }*/
                 contentList.addAll(returnedList);
 
                 /* extension: conversione di tutta la sequenza fin'ora ottenuta */
@@ -311,17 +291,27 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                         childLC.setFlags(LayoutContext.KEEP_WITH_PREVIOUS_PENDING, false);
                         // add an infinite penalty to forbid a break between
                         // blocks
+                        contentList.add(new BreakElement(
+                                new Position(this), KnuthElement.INFINITE, context));
+                        /*
                         contentList.add(new KnuthPenalty(0,
                                 KnuthElement.INFINITE, false,
                                 new Position(this), false));
-                    } else if (!((KnuthElement) contentList.getLast()).isGlue()) {
+                        */
+                    } else if (!((ListElement) contentList.getLast()).isGlue()) {
                         // add a null penalty to allow a break between blocks
+                        contentList.add(new BreakElement(
+                                new Position(this), 0, context));
+                        /*
                         contentList.add(new KnuthPenalty(0, 0, false,
-                                new Position(this), false));
+                                new Position(this), false));*/
                     } else {
                         // the last element in contentList is a glue;
                         // it is a feasible breakpoint, there is no need to add
                         // a penalty
+                        log.warn("glue-type break possibility not handled properly, yet");
+                        //TODO Does this happen? If yes, need to deal with border and padding
+                        //at the break possibility
                     }
                 }
                 if (returnedList == null || returnedList.size() == 0) {
@@ -329,9 +319,7 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                     continue;
                 }
                 contentList.addAll(returnedList);
-                if (((KnuthElement) returnedList.getLast()).isPenalty()
-                        && ((KnuthPenalty) returnedList.getLast()).getP() 
-                                == -KnuthElement.INFINITE) {
+                if (((ListElement) returnedList.getLast()).isForcedBreak()) {
                     // a descendant of this block has break-after
                     if (curLM.isFinished()) {
                         // there is no other content in this block;
@@ -380,9 +368,9 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
             returnList.add(new KnuthBox(0, notifyPos(new Position(this)), true));
         }
 
-        addKnuthElementsForBorderPaddingAfter(returnList);
+        addKnuthElementsForBorderPaddingAfter(returnList, true);
         addKnuthElementsForSpaceAfter(returnList, alignment);
-        addKnuthElementsForBreakAfter(returnList);
+        addKnuthElementsForBreakAfter(returnList, context);
 
         if (mustKeepWithNext()) {
             context.setFlags(LayoutContext.KEEP_WITH_NEXT_PENDING);
@@ -741,27 +729,159 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
     }
 
     /**
-     * Creates Knuth elements for before border padding and adds them to the return list.
-     * @param returnList return list to add the additional elements to
+     * Adds the unresolved elements for border and padding to a layout context so break
+     * possibilities can be properly constructed.
+     * @param context the layout context
      */
-    protected void addKnuthElementsForBorderPaddingBefore(LinkedList returnList/*, 
-            Position returnPosition*/) {
-        //Border and Padding (before)
-        CommonBorderPaddingBackground borderAndPadding = null;
+    protected void addPendingMarks(LayoutContext context) {
+        SpaceProperty spaceBefore = getSpaceBeforeProperty();
+        if (spaceBefore != null
+                   && !(spaceBefore.getMinimum(this).getLength().getValue(this) == 0 
+                        && spaceBefore.getMaximum(this).getLength().getValue(this) == 0)) {
+            context.addPendingBeforeMark(new SpaceElement(getAuxiliaryPosition(), spaceBefore,
+                    RelSide.BEFORE, 
+                    true, false, this));
+        }
+        SpaceProperty spaceAfter = getSpaceAfterProperty();
+        if (spaceAfter != null
+                && !(spaceAfter.getMinimum(this).getLength().getValue(this) == 0 
+                     && spaceAfter.getMaximum(this).getLength().getValue(this) == 0)) {
+            context.addPendingAfterMark(new SpaceElement(getAuxiliaryPosition(), spaceAfter,
+                    RelSide.AFTER, 
+                    false, true, this));
+        }
+        CommonBorderPaddingBackground borderAndPadding = getBorderPaddingBackground();
+        if (borderAndPadding != null) {
+            if (borderAndPadding.getBorderBeforeWidth(false) > 0) {
+                context.addPendingBeforeMark(new BorderElement(
+                        getAuxiliaryPosition(), 
+                        borderAndPadding.getBorderInfo(
+                                CommonBorderPaddingBackground.BEFORE).getWidth(),
+                                RelSide.BEFORE,
+                                false, false, this));
+            }
+            if (borderAndPadding.getPaddingBefore(false, this) > 0) {
+                context.addPendingBeforeMark(new PaddingElement(
+                        getAuxiliaryPosition(),
+                        borderAndPadding.getPaddingLengthProperty(
+                                CommonBorderPaddingBackground.BEFORE),
+                                RelSide.BEFORE, 
+                                false, false, this));
+            }
+            if (borderAndPadding.getBorderAfterWidth(false) > 0) {
+                context.addPendingAfterMark(new BorderElement(
+                        getAuxiliaryPosition(), 
+                        borderAndPadding.getBorderInfo(
+                                CommonBorderPaddingBackground.AFTER).getWidth(),
+                                RelSide.AFTER, 
+                                false, false, this));
+            }
+            if (borderAndPadding.getPaddingAfter(false, this) > 0) {
+                context.addPendingAfterMark(new PaddingElement(
+                        getAuxiliaryPosition(),
+                        borderAndPadding.getPaddingLengthProperty(
+                                CommonBorderPaddingBackground.AFTER),
+                                RelSide.AFTER, 
+                                false, false, this));
+            }
+        }
+    }
+    
+    /** @return the border, padding and background info structure */
+    private CommonBorderPaddingBackground getBorderPaddingBackground() {
         if (fobj instanceof org.apache.fop.fo.flow.Block) {
-            borderAndPadding = ((org.apache.fop.fo.flow.Block)fobj)
+            return ((org.apache.fop.fo.flow.Block)fobj)
                 .getCommonBorderPaddingBackground();
         } else if (fobj instanceof org.apache.fop.fo.flow.BlockContainer) {
-            borderAndPadding = ((org.apache.fop.fo.flow.BlockContainer)fobj)
+            return ((org.apache.fop.fo.flow.BlockContainer)fobj)
+                .getCommonBorderPaddingBackground();
+        } else if (fobj instanceof org.apache.fop.fo.flow.ListBlock) {
+            return ((org.apache.fop.fo.flow.ListBlock)fobj)
                 .getCommonBorderPaddingBackground();
+        } else if (fobj instanceof org.apache.fop.fo.flow.ListItem) {
+            return ((org.apache.fop.fo.flow.ListItem)fobj)
+                .getCommonBorderPaddingBackground();
+        } else if (fobj instanceof org.apache.fop.fo.flow.Table) {
+            return ((org.apache.fop.fo.flow.Table)fobj)
+                .getCommonBorderPaddingBackground();
+        } else {
+            return null;
+        }
+    }
+    
+    /** @return the space-before property */
+    private SpaceProperty getSpaceBeforeProperty() {
+        if (fobj instanceof org.apache.fop.fo.flow.Block) {
+            return ((org.apache.fop.fo.flow.Block)fobj)
+                .getCommonMarginBlock().spaceBefore;
+        } else if (fobj instanceof org.apache.fop.fo.flow.BlockContainer) {
+            return ((org.apache.fop.fo.flow.BlockContainer)fobj)
+                .getCommonMarginBlock().spaceBefore;
+        } else if (fobj instanceof org.apache.fop.fo.flow.ListBlock) {
+            return ((org.apache.fop.fo.flow.ListBlock)fobj)
+                .getCommonMarginBlock().spaceBefore;
+        } else if (fobj instanceof org.apache.fop.fo.flow.ListItem) {
+            return ((org.apache.fop.fo.flow.ListItem)fobj)
+                .getCommonMarginBlock().spaceBefore;
+        } else if (fobj instanceof org.apache.fop.fo.flow.Table) {
+            return ((org.apache.fop.fo.flow.Table)fobj)
+                .getCommonMarginBlock().spaceBefore;
+        } else {
+            return null;
+        }
+    }
+    
+    /** @return the space-after property */
+    private SpaceProperty getSpaceAfterProperty() {
+        if (fobj instanceof org.apache.fop.fo.flow.Block) {
+            return ((org.apache.fop.fo.flow.Block)fobj)
+                .getCommonMarginBlock().spaceAfter;
+        } else if (fobj instanceof org.apache.fop.fo.flow.BlockContainer) {
+            return ((org.apache.fop.fo.flow.BlockContainer)fobj)
+                .getCommonMarginBlock().spaceAfter;
+        } else if (fobj instanceof org.apache.fop.fo.flow.ListBlock) {
+            return ((org.apache.fop.fo.flow.ListBlock)fobj)
+                .getCommonMarginBlock().spaceAfter;
+        } else if (fobj instanceof org.apache.fop.fo.flow.ListItem) {
+            return ((org.apache.fop.fo.flow.ListItem)fobj)
+                .getCommonMarginBlock().spaceAfter;
+        } else if (fobj instanceof org.apache.fop.fo.flow.Table) {
+            return ((org.apache.fop.fo.flow.Table)fobj)
+                .getCommonMarginBlock().spaceAfter;
+        } else {
+            return null;
         }
+    }
+    
+    /**
+     * Creates Knuth elements for before border padding and adds them to the return list.
+     * @param returnList return list to add the additional elements to
+     */
+    protected void addKnuthElementsForBorderPaddingBefore(LinkedList returnList, boolean isFirst) {
+        //Border and Padding (before)
+        CommonBorderPaddingBackground borderAndPadding = getBorderPaddingBackground();
         if (borderAndPadding != null) {
+            if (borderAndPadding.getBorderBeforeWidth(false) > 0) {
+                returnList.add(new BorderElement(
+                        getAuxiliaryPosition(), 
+                        borderAndPadding.getBorderInfo(CommonBorderPaddingBackground.BEFORE)
+                                .getWidth(),
+                        RelSide.BEFORE, isFirst, false, this));
+            }
+            if (borderAndPadding.getPaddingBefore(false, this) > 0) {
+                returnList.add(new PaddingElement(
+                        getAuxiliaryPosition(),
+                        borderAndPadding.getPaddingLengthProperty(
+                                CommonBorderPaddingBackground.BEFORE), 
+                        RelSide.BEFORE, isFirst, false, this));
+            }
             //TODO Handle conditionality
+            /*
             int bpBefore = borderAndPadding.getBorderBeforeWidth(false)
                          + borderAndPadding.getPaddingBefore(false, this);
             if (bpBefore > 0) {
                 returnList.add(new KnuthBox(bpBefore, getAuxiliaryPosition(), true));
-            }
+            }*/
         }
     }
 
@@ -769,24 +889,31 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
      * Creates Knuth elements for after border padding and adds them to the return list.
      * @param returnList return list to add the additional elements to
      */
-    protected void addKnuthElementsForBorderPaddingAfter(LinkedList returnList/*, 
-            Position returnPosition*/) {
+    protected void addKnuthElementsForBorderPaddingAfter(LinkedList returnList, boolean isLast) {
         //Border and Padding (after)
-        CommonBorderPaddingBackground borderAndPadding = null;
-        if (fobj instanceof org.apache.fop.fo.flow.Block) {
-            borderAndPadding = ((org.apache.fop.fo.flow.Block)fobj)
-                .getCommonBorderPaddingBackground();
-        } else if (fobj instanceof org.apache.fop.fo.flow.BlockContainer) {
-            borderAndPadding = ((org.apache.fop.fo.flow.BlockContainer)fobj)
-                .getCommonBorderPaddingBackground();
-        }
+        CommonBorderPaddingBackground borderAndPadding = getBorderPaddingBackground();
         if (borderAndPadding != null) {
+            if (borderAndPadding.getPaddingAfter(false, this) > 0) {
+                returnList.add(new PaddingElement(
+                        getAuxiliaryPosition(),
+                        borderAndPadding.getPaddingLengthProperty(
+                                CommonBorderPaddingBackground.AFTER),
+                        RelSide.AFTER, false, isLast, this));
+            }
+            if (borderAndPadding.getBorderAfterWidth(false) > 0) {
+                returnList.add(new BorderElement(
+                        getAuxiliaryPosition(), 
+                        borderAndPadding.getBorderInfo(CommonBorderPaddingBackground.AFTER)
+                                .getWidth(),
+                        RelSide.AFTER, false, isLast, this));
+            }
             //TODO Handle conditionality
+            /*
             int bpAfter = borderAndPadding.getBorderAfterWidth(false)
                         + borderAndPadding.getPaddingAfter(false, this);
             if (bpAfter > 0) {
                 returnList.add(new KnuthBox(bpAfter, getAuxiliaryPosition(), true));
-            }
+            }*/
         }
     }
 
@@ -795,8 +922,8 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
      * @param returnList return list to add the additional elements to
      * @return true if an element has been added due to a break-before.
      */
-    protected boolean addKnuthElementsForBreakBefore(LinkedList returnList/*
-            Position returnPosition*/) {
+    protected boolean addKnuthElementsForBreakBefore(LinkedList returnList, 
+            LayoutContext context) {
         int breakBefore = -1;
         if (fobj instanceof org.apache.fop.fo.flow.Block) {
             breakBefore = ((org.apache.fop.fo.flow.Block) fobj).getBreakBefore();
@@ -810,8 +937,10 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                 || breakBefore == EN_EVEN_PAGE 
                 || breakBefore == EN_ODD_PAGE) {
             // return a penalty element, representing a forced page break
-            returnList.add(new KnuthPenalty(0, -KnuthElement.INFINITE, false,
-                    breakBefore, getAuxiliaryPosition(), false));
+            returnList.add(new BreakElement(getAuxiliaryPosition(), 
+                    0, -KnuthElement.INFINITE, breakBefore, context));
+            //returnList.add(new KnuthPenalty(0, -KnuthElement.INFINITE, false,
+            //        breakBefore, getAuxiliaryPosition(), false));
             return true;
         } else {
             return false;
@@ -823,8 +952,8 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
      * @param returnList return list to add the additional elements to
      * @return true if an element has been added due to a break-after.
      */
-    protected boolean addKnuthElementsForBreakAfter(LinkedList returnList/*
-            Position returnPosition*/) {
+    protected boolean addKnuthElementsForBreakAfter(LinkedList returnList, 
+            LayoutContext context) {
         int breakAfter = -1;
         if (fobj instanceof org.apache.fop.fo.flow.Block) {
             breakAfter = ((org.apache.fop.fo.flow.Block) fobj).getBreakAfter();
@@ -838,8 +967,10 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                 || breakAfter == EN_EVEN_PAGE
                 || breakAfter == EN_ODD_PAGE) {
             // add a penalty element, representing a forced page break
-            returnList.add(new KnuthPenalty(0, -KnuthElement.INFINITE, false,
-                    breakAfter, getAuxiliaryPosition(), false));
+            returnList.add(new BreakElement(getAuxiliaryPosition(), 
+                    0, -KnuthElement.INFINITE, breakAfter, context));
+            //returnList.add(new KnuthPenalty(0, -KnuthElement.INFINITE, false,
+            //        breakAfter, getAuxiliaryPosition(), false));
             return true;
         } else {
             return false;
@@ -853,21 +984,16 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
      */
     protected void addKnuthElementsForSpaceBefore(LinkedList returnList/*, 
             Position returnPosition*/, int alignment) {
-        SpaceProperty spaceBefore = null;
-        if (fobj instanceof org.apache.fop.fo.flow.Block) {
-            spaceBefore = ((org.apache.fop.fo.flow.Block)fobj)
-                .getCommonMarginBlock().spaceBefore;
-        } else if (fobj instanceof org.apache.fop.fo.flow.BlockContainer) {
-            spaceBefore = ((org.apache.fop.fo.flow.BlockContainer)fobj)
-                .getCommonMarginBlock().spaceBefore;
-        } else if (fobj instanceof org.apache.fop.fo.flow.ListBlock) {
-            spaceBefore = ((org.apache.fop.fo.flow.ListBlock)fobj)
-                .getCommonMarginBlock().spaceBefore;
-        } else if (fobj instanceof org.apache.fop.fo.flow.ListItem) {
-            spaceBefore = ((org.apache.fop.fo.flow.ListItem)fobj)
-                .getCommonMarginBlock().spaceBefore;
-        }
+        SpaceProperty spaceBefore = getSpaceBeforeProperty();
         // append elements representing space-before
+        if (spaceBefore != null
+                   && !(spaceBefore.getMinimum(this).getLength().getValue(this) == 0 
+                        && spaceBefore.getMaximum(this).getLength().getValue(this) == 0)) {
+            returnList.add(new SpaceElement(getAuxiliaryPosition(), spaceBefore,
+                    RelSide.BEFORE, 
+                    true, false, this));
+        }
+        /*
         if (bpUnit > 0
                 || spaceBefore != null
                    && !(spaceBefore.getMinimum(this).getLength().getValue(this) == 0 
@@ -882,7 +1008,7 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                 returnList.add(new KnuthGlue(0, 0, 0,
                         BlockLevelLayoutManager.SPACE_BEFORE_ADJUSTMENT, 
                         getAuxiliaryPosition(), true));
-            } else /*if (alignment == EN_JUSTIFY)*/ {
+            } else { //if (alignment == EN_JUSTIFY) {
                 returnList.add(new KnuthGlue(
                         spaceBefore.getOptimum(this).getLength().getValue(this),
                         spaceBefore.getMaximum(this).getLength().getValue(this)
@@ -891,13 +1017,13 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                                 - spaceBefore.getMinimum(this).getLength().getValue(this),
                         BlockLevelLayoutManager.SPACE_BEFORE_ADJUSTMENT, 
                         getAuxiliaryPosition(), true));
-            } /*else {
-                returnList.add(new KnuthGlue(
-                        spaceBefore.getOptimum().getLength().getValue(this), 
-                        0, 0, BlockLevelLayoutManager.SPACE_BEFORE_ADJUSTMENT,
-                        returnPosition, true));
-            }*/
-        }
+//            } else {
+//                returnList.add(new KnuthGlue(
+//                        spaceBefore.getOptimum().getLength().getValue(this), 
+//                        0, 0, BlockLevelLayoutManager.SPACE_BEFORE_ADJUSTMENT,
+//                        returnPosition, true));
+            }
+        }*/
     }
 
     /**
@@ -907,21 +1033,16 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
      */
     protected void addKnuthElementsForSpaceAfter(LinkedList returnList/*, Position returnPosition*/, 
                 int alignment) {
-        SpaceProperty spaceAfter = null;
-        if (fobj instanceof org.apache.fop.fo.flow.Block) {
-            spaceAfter = ((org.apache.fop.fo.flow.Block)fobj)
-                .getCommonMarginBlock().spaceAfter;
-        } else if (fobj instanceof org.apache.fop.fo.flow.BlockContainer) {
-            spaceAfter = ((org.apache.fop.fo.flow.BlockContainer)fobj)
-                .getCommonMarginBlock().spaceAfter;
-        } else if (fobj instanceof org.apache.fop.fo.flow.ListBlock) {
-            spaceAfter = ((org.apache.fop.fo.flow.ListBlock)fobj)
-                .getCommonMarginBlock().spaceAfter;
-        } else if (fobj instanceof org.apache.fop.fo.flow.ListItem) {
-            spaceAfter = ((org.apache.fop.fo.flow.ListItem)fobj)
-                .getCommonMarginBlock().spaceAfter;
-        }
+        SpaceProperty spaceAfter = getSpaceAfterProperty();
         // append elements representing space-after
+        if (spaceAfter != null
+                && !(spaceAfter.getMinimum(this).getLength().getValue(this) == 0 
+                     && spaceAfter.getMaximum(this).getLength().getValue(this) == 0)) {
+            returnList.add(new SpaceElement(getAuxiliaryPosition(), spaceAfter,
+                    RelSide.AFTER, 
+                    false, true, this));
+        }
+        /*
         if (bpUnit > 0
                 || spaceAfter != null
                    && !(spaceAfter.getMinimum(this).getLength().getValue(this) == 0 
@@ -934,7 +1055,7 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                 returnList.add(new KnuthGlue(0, 0, 0, 
                         BlockLevelLayoutManager.SPACE_AFTER_ADJUSTMENT,
                         getAuxiliaryPosition(), true));
-            } else /*if (alignment == EN_JUSTIFY)*/ {
+            } else { //if (alignment == EN_JUSTIFY) {
                 returnList.add(new KnuthGlue(
                         spaceAfter.getOptimum(this).getLength().getValue(this),
                         spaceAfter.getMaximum(this).getLength().getValue(this)
@@ -943,16 +1064,16 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
                                 - spaceAfter.getMinimum(this).getLength().getValue(this),
                         BlockLevelLayoutManager.SPACE_AFTER_ADJUSTMENT, getAuxiliaryPosition(),
                         (!spaceAfter.getSpace().isDiscard()) ? false : true));
-            } /*else {
-                returnList.add(new KnuthGlue(
-                        spaceAfter.getOptimum().getLength().getValue(this), 0, 0,
-                        BlockLevelLayoutManager.SPACE_AFTER_ADJUSTMENT, returnPosition,
-                        (!spaceAfter.getSpace().isDiscard()) ? false : true));
-            }*/
+//            } else {
+//                returnList.add(new KnuthGlue(
+//                        spaceAfter.getOptimum().getLength().getValue(this), 0, 0,
+//                        BlockLevelLayoutManager.SPACE_AFTER_ADJUSTMENT, returnPosition,
+//                        (!spaceAfter.getSpace().isDiscard()) ? false : true));
+            }
             if (spaceAfter != null && !spaceAfter.getSpace().isDiscard()) {
                 returnList.add(new KnuthBox(0, getAuxiliaryPosition(), true));
             }
-        }
+        }*/
     }
 
     protected LinkedList createUnitElements(LinkedList oldList) {
@@ -1330,8 +1451,8 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
           
         ListIterator listIter = sourceList.listIterator();
         while (listIter.hasNext()) {
-            KnuthElement tempElement;
-            tempElement = (KnuthElement) listIter.next();
+            ListElement tempElement;
+            tempElement = (ListElement) listIter.next();
             if (force || tempElement.getLayoutManager() != this) {
                 tempElement.setPosition(notifyPos(new NonLeafPosition(this,
                         tempElement.getPosition())));
diff --git a/src/java/org/apache/fop/layoutmgr/BorderElement.java b/src/java/org/apache/fop/layoutmgr/BorderElement.java
new file mode 100644 (file)
index 0000000..691fcab
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import org.apache.fop.datatypes.PercentBaseContext;
+import org.apache.fop.fo.properties.CondLengthProperty;
+import org.apache.fop.traits.MinOptMax;
+
+/**
+ * This represents an unresolved border element.
+ */
+public class BorderElement extends BorderOrPaddingElement {
+
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     * @param side the side to which this space element applies.
+     * @param condLength the length-conditional property for a border or padding specification
+     * @param isFirst true if this is a padding- or border-before of the first area generated.
+     * @param isLast true if this is a padding- or border-after of the last area generated.
+     * @param context the property evaluation context
+     */
+    public BorderElement(Position position, CondLengthProperty condLength,
+            RelSide side,
+            boolean isFirst, boolean isLast, PercentBaseContext context) {
+        super(position, condLength, side, isFirst, isLast, context);
+    }
+    
+    /** @see org.apache.fop.layoutmgr.UnresolvedListElementWithLength */
+    public void notifyLayoutManager(MinOptMax effectiveLength) {
+        LayoutManager lm = getOriginatingLayoutManager();
+        if (lm instanceof ConditionalElementListener) {
+            ((ConditionalElementListener)lm).notifyBorder(
+                    getSide(), effectiveLength);
+        } else {
+            log.warn("Cannot notify LM. It does not implement ConditionalElementListener: "
+                    + lm.getClass().getName());
+        }
+    }
+    
+    /** @see java.lang.Object#toString() */
+    public String toString() {
+        StringBuffer sb = new StringBuffer("Border[");
+        sb.append(super.toString());
+        sb.append("]");
+        return sb.toString();
+    }
+    
+}
diff --git a/src/java/org/apache/fop/layoutmgr/BorderOrPaddingElement.java b/src/java/org/apache/fop/layoutmgr/BorderOrPaddingElement.java
new file mode 100644 (file)
index 0000000..2e4dc31
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import org.apache.fop.datatypes.PercentBaseContext;
+import org.apache.fop.fo.properties.CondLengthProperty;
+import org.apache.fop.traits.MinOptMax;
+
+/**
+ * This class represents an unresolved border or padding element.
+ */
+public abstract class BorderOrPaddingElement extends UnresolvedListElementWithLength {
+
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     * @param side the side to which this space element applies.
+     * @param condLength the length-conditional property for a border or padding specification
+     * @param isFirst true if this is a padding- or border-before of the first area generated.
+     * @param isLast true if this is a padding- or border-after of the last area generated.
+     * @param context the property evaluation context
+     */
+    public BorderOrPaddingElement(Position position, CondLengthProperty condLength,
+            RelSide side,
+            boolean isFirst, boolean isLast, PercentBaseContext context) {
+        super(position,
+                new MinOptMax(condLength.getLength().getValue(context)), side, 
+                        condLength.isDiscard(), isFirst, isLast);
+    }
+    
+    /** @see org.apache.fop.layoutmgr.UnresolvedListElementWithLength */
+    public abstract void notifyLayoutManager(MinOptMax effectiveLength);
+        
+}
diff --git a/src/java/org/apache/fop/layoutmgr/BreakElement.java b/src/java/org/apache/fop/layoutmgr/BreakElement.java
new file mode 100644 (file)
index 0000000..db9246f
--- /dev/null
@@ -0,0 +1,149 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import java.util.List;
+
+import org.apache.fop.fo.Constants;
+
+/**
+ * This class represents an unresolved break possibility.
+ */
+public class BreakElement extends UnresolvedListElement {
+
+    private int penaltyWidth;
+    private int penaltyValue;
+    private int breakClass = -1;
+    private List pendingBeforeMarks;
+    private List pendingAfterMarks;
+    
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     * @param penaltyValue the penalty value for the penalty element to be constructed
+     * @param context the layout context which contains the pending conditional elements
+     */
+    public BreakElement(Position position, int penaltyValue, LayoutContext context) {
+        this(position, 0, penaltyValue, -1, context);
+    }
+    
+    /**
+     * Constructor for hard breaks.
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     * @param penaltyWidth the penalty width
+     * @param penaltyValue the penalty value for the penalty element to be constructed
+     * @param breakClass the break class of this penalty (one of the break-* constants)
+     * @param context the layout context which contains the pending conditional elements
+     */
+    public BreakElement(Position position, int penaltyWidth, int penaltyValue, 
+                int breakClass, LayoutContext context) {
+        super(position);
+        this.penaltyWidth = penaltyWidth;
+        this.penaltyValue = penaltyValue;
+        this.breakClass = breakClass;
+        this.pendingBeforeMarks = context.getPendingBeforeMarks();
+        this.pendingAfterMarks = context.getPendingAfterMarks();
+    }
+    
+    /** @see org.apache.fop.layoutmgr.UnresolvedListElement#isConditional() */
+    public boolean isConditional() {
+        return false; //Does not really apply here
+    }
+
+    /** @see org.apache.fop.layoutmgr.ListElement#isPenalty() */
+    /*
+    public boolean isPenalty() {
+        return true; //not entirely true but a BreakElement will generate a penalty later
+    }*/
+
+    /** @return the penalty width */
+    public int getPenaltyWidth() {
+        return this.penaltyWidth;
+    }
+    
+    /** @return the penalty value */
+    public int getPenaltyValue() {
+        return this.penaltyValue;
+    }
+    
+    /**
+     * Sets the penalty value.
+     * @param p the new penalty value
+     */
+    public void setPenaltyValue(int p) {
+        this.penaltyValue = p;
+    }
+    
+    /** @see org.apache.fop.layoutmgr.ListElement#isForcedBreak() */
+    public boolean isForcedBreak() {
+        return penaltyValue == -KnuthElement.INFINITE;
+    }
+    
+    /** @return the break class of this penalty (one of the break-* constants) */
+    public int getBreakClass() {
+        return breakClass;
+    }
+    
+    /**
+     * Sets the break class.
+     * @param breakClass the new break class
+     */
+    public void setBreakClass(int breakClass) {
+        this.breakClass = breakClass;
+    }
+    
+    /** @return the pending border and padding elements at the before edge */
+    public List getPendingBeforeMarks() {
+        return this.pendingBeforeMarks;
+    }
+    
+    /** @return the pending border and padding elements at the after edge */
+    public List getPendingAfterMarks() {
+        return this.pendingAfterMarks;
+    }
+    
+    /** @see java.lang.Object#toString() */
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+        sb.append("BreakPossibility[p:");
+        sb.append(this.penaltyValue);
+        if (isForcedBreak()) {
+            sb.append(" (forced break");
+            switch (getBreakClass()) {
+            case Constants.EN_PAGE:
+                sb.append(", page");
+                break;
+            case Constants.EN_COLUMN:
+                sb.append(", column");
+                break;
+            case Constants.EN_EVEN_PAGE:
+                sb.append(", even page");
+                break;
+            case Constants.EN_ODD_PAGE:
+                sb.append(", odd page");
+                break;
+            default:
+            }
+            sb.append(")");
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+
+}
diff --git a/src/java/org/apache/fop/layoutmgr/ConditionalElementListener.java b/src/java/org/apache/fop/layoutmgr/ConditionalElementListener.java
new file mode 100644 (file)
index 0000000..3cc4be6
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import org.apache.fop.traits.MinOptMax;
+
+/**
+ * This interface is used to notify layout managers about the situation around spaces, borders
+ * and padding just before the addArea() method is called when a part is being painted.
+ */
+public interface ConditionalElementListener {
+
+    /**
+     * Notifies the layout manager about the effective length of its space.
+     * @param side the side to which the space applies
+     * @param effectiveLength the effective length after space-resolution (null means zero length)
+     */
+    void notifySpace(RelSide side, MinOptMax effectiveLength);
+
+    /**
+     * Notifies the layout manager about the effective length/width of its border.
+     * @param side the side to which the border applies
+     * @param effectiveLength the effective length in the current break situation
+     *                        (null means zero length)
+     */
+    void notifyBorder(RelSide side, MinOptMax effectiveLength);
+
+    /**
+     * Notifies the layout manager about the effective length/width of its padding.
+     * @param side the side to which the padding applies
+     * @param effectiveLength the effective length in the current break situation
+     *                        (null means zero length)
+     */
+    void notifyPadding(RelSide side, MinOptMax effectiveLength);
+    
+}
index c1100d00fa19a1fcba1d4090b3e63e77de77a90b..c4fd42a353deac3d32b821ee1e32a75aa1edfe5e 100644 (file)
@@ -36,13 +36,16 @@ public class ElementListUtils {
     public static void removeLegalBreaks(LinkedList elements) {
         ListIterator i = elements.listIterator();
         while (i.hasNext()) {
-            KnuthElement el = (KnuthElement)i.next();
+            ListElement el = (ListElement)i.next();
             if (el.isPenalty()) {
-                KnuthPenalty penalty = (KnuthPenalty)el;
+                BreakElement breakPoss = (BreakElement)el;
                 //Convert all penalties no break inhibitors
-                if (penalty.getP() < KnuthPenalty.INFINITE) {
+                if (breakPoss.getPenaltyValue() < KnuthPenalty.INFINITE) {
+                    breakPoss.setPenaltyValue(KnuthPenalty.INFINITE);
+                    /*
                     i.set(new KnuthPenalty(penalty.getW(), KnuthPenalty.INFINITE, 
                             penalty.isFlagged(), penalty.getPosition(), penalty.isAuxiliary()));
+                    */
                 }
             } else if (el.isGlue()) {
                 i.previous();
@@ -106,11 +109,11 @@ public class ElementListUtils {
         int count = end - start + 1;
         int len = 0;
         while (iter.hasNext()) {
-            KnuthElement el = (KnuthElement)iter.next();
+            ListElement el = (ListElement)iter.next();
             if (el.isBox()) {
-                len += el.getW();
+                len += ((KnuthElement)el).getW();
             } else if (el.isGlue()) {
-                len += el.getW();
+                len += ((KnuthElement)el).getW();
             } else {
                 //log.debug("Ignoring penalty: " + el);
                 //ignore penalties
@@ -133,4 +136,14 @@ public class ElementListUtils {
         return calcContentLength(elems, 0, elems.size() - 1);
     }
     
+    /**
+     * Indicates whether the given element list ends with a forced break.
+     * @param elems the element list
+     * @return true if the list ends with a forced break
+     */
+    public static boolean endsWithForcedBreak(LinkedList elems) {
+        ListElement last = (ListElement)elems.getLast();
+        return last.isForcedBreak();
+    }
+    
 }
index 37e852cb614bc1125c94cfe04ab3d6deaec6ba21..3ec814bd2faf961059bda98232faa222a7bf5b56 100644 (file)
@@ -36,7 +36,6 @@ import java.util.ListIterator;
  */
 public class FlowLayoutManager extends BlockStackingLayoutManager
                                implements BlockLevelLayoutManager {
-    private Flow fobj;
     
     /** Array of areas currently being filled stored by area class */
     private BlockParent[] currentAreas = new BlockParent[Area.CLASS_MAX];
@@ -51,7 +50,6 @@ public class FlowLayoutManager extends BlockStackingLayoutManager
      */
     public FlowLayoutManager(PageSequenceLayoutManager pslm, Flow node) {
         super(node);
-        fobj = node;
         setParent(pslm);
     }
 
@@ -84,6 +82,7 @@ public class FlowLayoutManager extends BlockStackingLayoutManager
                 log.debug("span change from " + currentSpan + " to " + span);
                 context.signalSpanChange(span);
                 currentSpan = span;
+                SpaceResolver.resolveElementList(returnList);
                 return returnList;
             }
             
@@ -109,10 +108,10 @@ public class FlowLayoutManager extends BlockStackingLayoutManager
             wrapPositionElements(tempList, returnedList);
 
             if (returnedList.size() == 1
-                && ((KnuthElement)returnedList.getFirst()).isPenalty()
-                && ((KnuthPenalty)returnedList.getFirst()).getP() == -KnuthElement.INFINITE) {
+                && ElementListUtils.endsWithForcedBreak(returnedList)) {
                 // a descendant of this flow has break-before
                 returnList.addAll(returnedList);
+                SpaceResolver.resolveElementList(returnList);
                 return returnList;
             } else {
                 if (returnList.size() > 0) {
@@ -123,20 +122,19 @@ public class FlowLayoutManager extends BlockStackingLayoutManager
                         context.setFlags(LayoutContext.KEEP_WITH_NEXT_PENDING, false);
                         childLC.setFlags(LayoutContext.KEEP_WITH_PREVIOUS_PENDING, false);
                         // add an infinite penalty to forbid a break between blocks
-                        returnList.add(new KnuthPenalty(0, KnuthElement.INFINITE, false, 
-                                new Position(this), false));
-                    } else if (!((KnuthElement) returnList.getLast()).isGlue()) {
+                        returnList.add(new BreakElement(
+                                new Position(this), KnuthElement.INFINITE, context));
+                    } else if (!((ListElement) returnList.getLast()).isGlue()) {
                         // add a null penalty to allow a break between blocks
-                        returnList.add(new KnuthPenalty(0, 0, false, 
-                                new Position(this), false));
+                        returnList.add(new BreakElement(
+                                new Position(this), 0, context));
                     }
                 }
-                if (returnedList.size() > 0) { // controllare!
+                if (returnedList.size() > 0) {
                     returnList.addAll(returnedList);
-                    if (((KnuthElement)returnedList.getLast()).isPenalty()
-                        && ((KnuthPenalty)returnedList.getLast()).getP() 
-                                == -KnuthElement.INFINITE) {
+                    if (ElementListUtils.endsWithForcedBreak(returnList)) {
                         // a descendant of this flow has break-after
+                        SpaceResolver.resolveElementList(returnList);
                         return returnList;
                     }
                 }
@@ -148,6 +146,7 @@ public class FlowLayoutManager extends BlockStackingLayoutManager
             }
         }
 
+        SpaceResolver.resolveElementList(returnList);
         setFinished(true);
 
         if (returnList.size() > 0) {
index 9ba98048e3eb8089a86e3600bf7a8d61e64295a7..51868f4e9c453c090bbf285939b05d2e1ba6af2f 100644 (file)
@@ -23,12 +23,20 @@ import org.apache.fop.fo.flow.FootnoteBody;
 
 import java.util.LinkedList;
 
+/**
+ * Layout manager for footnote bodies.
+ */
 public class FootnoteBodyLayoutManager extends BlockStackingLayoutManager {
 
+    /**
+     * Creates a new FootnoteBodyLayoutManager.
+     * @param body the footnote-body element
+     */
     public FootnoteBodyLayoutManager(FootnoteBody body) {
         super(body);
     }
 
+    /** @see org.apache.fop.layoutmgr.LayoutManager */
     public void addAreas(PositionIterator parentIter, LayoutContext layoutContext) {
         LayoutManager childLM = null;
         LayoutManager lastLM = null;
@@ -38,8 +46,6 @@ public class FootnoteBodyLayoutManager extends BlockStackingLayoutManager {
         // and put them in a new list;
         LinkedList positionList = new LinkedList();
         Position pos;
-        boolean bSpaceBefore = false;
-        boolean bSpaceAfter = false;
         while (parentIter.hasNext()) {
             pos = (Position) parentIter.next();
             //log.trace("pos = " + pos.getClass().getName() + "; " + pos);
@@ -73,14 +79,13 @@ public class FootnoteBodyLayoutManager extends BlockStackingLayoutManager {
         }
     }
 
+    /** @see org.apache.fop.layoutmgr.LayoutManager#addChildArea(org.apache.fop.area.Area) */
     public void addChildArea(Area childArea) {
         childArea.setAreaClass(Area.CLASS_FOOTNOTE);
         parentLM.addChildArea(childArea);
     }
 
-    /**
-     * convenience method that returns the FootnoteBody node
-     */
+    /** @return the FootnoteBody node */
     protected FootnoteBody getFootnodeBodyFO() {
         return (FootnoteBody) fobj;
     }
index cef81aaab021bea04e5f0ce25568c1c81b40cf56..97d0bbd565e6fac5516fffc285883df0b98508ca 100644 (file)
@@ -26,12 +26,12 @@ package org.apache.fop.layoutmgr;
  * special feature (for example, the additional elements used to represent
  * a space when text alignment is right, left or center).
  */
-public abstract class KnuthElement {
+public abstract class KnuthElement extends ListElement {
 
+    /** The value used as an infinite indicator. */
     public static final int INFINITE = 1000;
 
     private int width;
-    private Position position;
     private boolean bIsAuxiliary;
 
     /**
@@ -43,84 +43,39 @@ public abstract class KnuthElement {
      * @param bAux is this an auxiliary element?
      */
     protected KnuthElement(int w, Position pos, boolean bAux) {
+        super(pos);
         width = w;
-        position = pos;
         bIsAuxiliary = bAux;
     }
 
-    /**
-     * Return true if this element is a KnuthBox.
-     */
-    public boolean isBox() {
-        return false;
-    }
-
-    /**
-     * Return true if this element is a KnuthGlue.
-     */
-    public boolean isGlue() {
-        return false;
-    }
-
-    /**
-     * Return true if this element is a KnuthPenalty.
-     */
-    public boolean isPenalty() {
-        return false;
-    }
-
-    /**
-     * Return true if this element is an auxiliary one.
-     */
+    /** @return true if this element is an auxiliary one. */
     public boolean isAuxiliary() {
         return bIsAuxiliary;
     }
 
-    /**
-     * Return the width of this element.
-     */
+    /** @return the width of this element. */
     public int getW() {
         return width;
     }
 
+    /** @return the penalty value of this element, if applicable. */ 
     public int getP() {
         throw new RuntimeException("Element is not a penalty");
     }
 
+    /** @return the stretch value of this element, if applicable. */ 
     public int getY() {
         throw new RuntimeException("Element is not a glue");
     }
 
+    /** @return the shrink value of this element, if applicable. */ 
     public int getZ() {
         throw new RuntimeException("Element is not a glue");
     }
-
-    public boolean isForcedBreak() {
+    
+    /** @see org.apache.fop.layoutmgr.ListElement#isUnresolvedElement() */
+    public boolean isUnresolvedElement() {
         return false;
     }
 
-    /**
-     * Return the Position stored in this element.
-     */
-    public Position getPosition() {
-        return position;
-    }
-
-    /**
-     * Change the Position stored in this element.
-     */
-    public void setPosition(Position pos) {
-        position = pos;
-    }
-
-    /**
-     * Return the LayoutManager responsible for this element.
-     */
-    public LayoutManager getLayoutManager() {
-        if (position != null) {
-            return position.getLM();
-        } else {
-            return null;
-        }
-    }
 }
index 0b157c0504af7bcc80428b1eefd534f6165b4285..3cd2c9e69f887455e3c93d4185e6ac7458d2dd34 100644 (file)
@@ -65,15 +65,15 @@ public class KnuthPossPosIter extends PositionIterator {
         return super.next();
     }
 
-    public KnuthElement getKE() {
-        return (KnuthElement) peekNext();
+    public ListElement getKE() {
+        return (ListElement) peekNext();
     }
 
     protected LayoutManager getLM(Object nextObj) {
-        return ((KnuthElement) nextObj).getLayoutManager();
+        return ((ListElement) nextObj).getLayoutManager();
     }
 
     protected Position getPos(Object nextObj) {
-        return ((KnuthElement) nextObj).getPosition();
+        return ((ListElement) nextObj).getPosition();
     }
 }
index 77f30f1c5c42c248cd0f61fd0f1597ca5c0de662..15a61a182ec645d9c609d8e903746a9686c95583 100644 (file)
@@ -53,9 +53,19 @@ public class KnuthSequence extends ArrayList {
     }
 
     /**
+     * Finalizes a Knuth sequence.
      * @return a finalized sequence.
      */
     public KnuthSequence endSequence() {
+        return endSequence(null);
+    }
+    
+    /**
+     * Finalizes a Knuth sequence.
+     * @param breakPosition a Position instance for the last penalty (may be null)
+     * @return a finalized sequence.
+     */
+    public KnuthSequence endSequence(Position breakPosition) {
         // remove glue and penalty item at the end of the paragraph
         while (this.size() > ignoreAtStart
                && !((KnuthElement)this.get(this.size() - 1)).isBox()) {
@@ -66,7 +76,7 @@ public class KnuthSequence extends ArrayList {
             // and the forced break
             this.add(new KnuthPenalty(0, KnuthElement.INFINITE, false, null, false));
             this.add(new KnuthGlue(0, 10000000, 0, null, false));
-            this.add(new KnuthPenalty(0, -KnuthElement.INFINITE, false, null, false));
+            this.add(new KnuthPenalty(0, -KnuthElement.INFINITE, false, breakPosition, false));
             ignoreAtEnd = 3;
             return this;
         } else {
index 45ce1889b87c3a408deb99218b1763e5aba1c3ad..e4710b1a16b6e1465ddc208d4789f86144441e3b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-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.
@@ -18,6 +18,9 @@
 
 package org.apache.fop.layoutmgr;
 
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.fop.fo.Constants;
 import org.apache.fop.layoutmgr.inline.HyphContext;
 import org.apache.fop.traits.MinOptMax;
@@ -25,7 +28,7 @@ import org.apache.fop.layoutmgr.inline.AlignmentContext;
 
 
 /**
- * This class is used to pass information to the getNextBreakPoss()
+ * This class is used to pass information to the getNextKnuthElements()
  * method. It is set up by higher level LM and used by lower level LM.
  */
 public class LayoutContext {
@@ -91,6 +94,18 @@ public class LayoutContext {
 
     /** Current pending space-before or space-start from ancestor areas */
     SpaceSpecifier leadingSpace;
+    
+    /**
+     * A list of pending marks (border and padding) on the after edge when a page break occurs. 
+     * May be null.
+     */
+    private List pendingAfterMarks;
+    
+    /**
+     * A list of pending marks (border and padding) on the before edge when a page break occurs. 
+     * May be null.
+     */
+    private List pendingBeforeMarks;
 
     /** Current hyphenation context. May be null. */
     private HyphContext hyphContext = null;
@@ -117,6 +132,10 @@ public class LayoutContext {
     /** Amount of space to reserve at the end of each line */
     private int lineEndBorderAndPaddingWidth = 0;
 
+    /**
+     * Copy constructor for creating child layout contexts.
+     * @param parentLC the parent layout context to copy from
+     */
     public LayoutContext(LayoutContext parentLC) {
         this.flags = parentLC.flags;
         this.refIPD = parentLC.refIPD;
@@ -131,9 +150,14 @@ public class LayoutContext {
         this.alignmentContext = parentLC.alignmentContext;
         this.lineStartBorderAndPaddingWidth = parentLC.lineStartBorderAndPaddingWidth;
         this.lineEndBorderAndPaddingWidth = parentLC.lineEndBorderAndPaddingWidth;
-        // Copy other fields as necessary. Use clone???
+        copyPendingMarksFrom(parentLC);
+        // Copy other fields as necessary.
     }
 
+    /**
+     * Main constructor.
+     * @param flags the initial flags
+     */
     public LayoutContext(int flags) {
         this.flags = flags;
         this.refIPD = 0;
@@ -142,6 +166,15 @@ public class LayoutContext {
         trailingSpace = null;
     }
 
+    public void copyPendingMarksFrom(LayoutContext source) {
+        if (source.pendingAfterMarks != null) {
+            this.pendingAfterMarks = new java.util.ArrayList(source.pendingAfterMarks); 
+        }
+        if (source.pendingBeforeMarks != null) {
+            this.pendingBeforeMarks = new java.util.ArrayList(source.pendingBeforeMarks); 
+        }
+    }
+    
     public void setFlags(int flags) {
         setFlags(flags, true);
     }
@@ -206,6 +239,56 @@ public class LayoutContext {
         return trailingSpace;
     }
 
+    /**
+     * Adds a border or padding element to the pending list which will be used to generate
+     * the right element list for break possibilities. Conditionality resolution will be done
+     * elsewhere.
+     * @param element the border, padding or space element
+     */
+    public void addPendingAfterMark(UnresolvedListElementWithLength element) {
+        if (this.pendingAfterMarks == null) {
+            this.pendingAfterMarks = new java.util.ArrayList();
+        }
+        this.pendingAfterMarks.add(element);
+    }
+    
+    /**
+     * @return the pending border and padding elements at the after edge
+     * @see addPendingAfterMark(BorderOrPaddingElement)
+     */
+    public List getPendingAfterMarks() {
+        if (this.pendingAfterMarks != null) {
+            return Collections.unmodifiableList(this.pendingAfterMarks);
+        } else {
+            return null;
+        }
+    }
+    
+    /**
+     * Adds a border or padding element to the pending list which will be used to generate
+     * the right element list for break possibilities. Conditionality resolution will be done
+     * elsewhere.
+     * @param element the border, padding or space element
+     */
+    public void addPendingBeforeMark(UnresolvedListElementWithLength element) {
+        if (this.pendingBeforeMarks == null) {
+            this.pendingBeforeMarks = new java.util.ArrayList();
+        }
+        this.pendingBeforeMarks.add(element);
+    }
+    
+    /**
+     * @return the pending border and padding elements at the before edge
+     * @see addPendingBeforeMark(BorderOrPaddingElement)
+     */
+    public List getPendingBeforeMarks() {
+        if (this.pendingBeforeMarks != null) {
+            return Collections.unmodifiableList(this.pendingBeforeMarks);
+        } else {
+            return null;
+        }
+    }
+    
     public void setStackLimit(MinOptMax limit) {
         stackLimit = limit;
     }
diff --git a/src/java/org/apache/fop/layoutmgr/ListElement.java b/src/java/org/apache/fop/layoutmgr/ListElement.java
new file mode 100644 (file)
index 0000000..6707c66
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+/**
+ * This class is the base class for all kinds of elements that are added to element lists. There
+ * are basically two kinds of list elements: Knuth elements and unresolved elements like spaces,
+ * border and padding elements which are converted to Knuth elements prior to the breaking
+ * process. 
+ */
+public abstract class ListElement {
+
+    private Position position;
+    
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     */
+    public ListElement(Position position) {
+        this.position = position;
+    }
+    
+    /**
+     * @return the Position instance for this element.
+     */
+    public Position getPosition() {
+        return this.position;
+    }
+    
+    /**
+     * Change the Position stored in this element.
+     * @param position the Position instance
+     */
+    public void setPosition(Position position) {
+        this.position = position;
+    }
+
+    /**
+     * @return the LayoutManager responsible for this element.
+     */
+    public LayoutManager getLayoutManager() {
+        if (position != null) {
+            return position.getLM();
+        } else {
+            return null;
+        }
+    }
+
+    /** @return true if this element is a KnuthBox. */
+    public boolean isBox() {
+        return false;
+    }
+
+    /** @return true if this element is a KnuthGlue. */
+    public boolean isGlue() {
+        return false;
+    }
+
+    /** @return true if this element is a KnuthPenalty. */
+    public boolean isPenalty() {
+        return false;
+    }
+
+    /** @return true if the element is a penalty and represents a forced break. */ 
+    public boolean isForcedBreak() {
+        return false;
+    }
+
+    /** @return true if the element is an unresolved element such as a space or a border. */ 
+    public boolean isUnresolvedElement() {
+        return true;
+    }
+    
+}
diff --git a/src/java/org/apache/fop/layoutmgr/PaddingElement.java b/src/java/org/apache/fop/layoutmgr/PaddingElement.java
new file mode 100644 (file)
index 0000000..3928b7a
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import org.apache.fop.datatypes.PercentBaseContext;
+import org.apache.fop.fo.properties.CondLengthProperty;
+import org.apache.fop.traits.MinOptMax;
+
+/**
+ * This represents an unresolved padding element.
+ */
+public class PaddingElement extends BorderOrPaddingElement {
+
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     * @param side the side to which this space element applies.
+     * @param condLength the length-conditional property for a border or padding specification
+     * @param isFirst true if this is a padding- or border-before of the first area generated.
+     * @param isLast true if this is a padding- or border-after of the last area generated.
+     * @param context the property evaluation context
+     */
+    public PaddingElement(Position position, CondLengthProperty condLength,
+            RelSide side,
+            boolean isFirst, boolean isLast, PercentBaseContext context) {
+        super(position, condLength, side, isFirst, isLast, context);
+    }
+    
+    /** @see org.apache.fop.layoutmgr.UnresolvedListElementWithLength */
+    public void notifyLayoutManager(MinOptMax effectiveLength) {
+        LayoutManager lm = getOriginatingLayoutManager(); 
+        if (lm instanceof ConditionalElementListener) {
+            ((ConditionalElementListener)lm).notifyPadding(
+                    getSide(), effectiveLength);
+        } else {
+            log.warn("Cannot notify LM. It does not implement ConditionalElementListene: "
+                    + lm.getClass().getName());
+        }
+    }
+
+    /** @see java.lang.Object#toString() */
+    public String toString() {
+        StringBuffer sb = new StringBuffer("Padding[");
+        sb.append(super.toString());
+        sb.append("]");
+        return sb.toString();
+    }
+    
+}
index 507e2a38447e60c3ff45777e6a8edb584168e801..a6d912904f273d46f87c102ec09a76a6385a564b 100644 (file)
@@ -201,6 +201,11 @@ class PageBreakingAlgorithm extends BreakingAlgorithm {
         ListIterator elementListsIterator = elementLists.listIterator();
         while (elementListsIterator.hasNext()) {
             LinkedList noteList = (LinkedList) elementListsIterator.next();
+            
+            //Space resolution (Note: this does not respect possible stacking constraints 
+            //between footnotes!)
+            SpaceResolver.resolveElementList(noteList);
+            
             int noteLength = 0;
             footnotesList.add(noteList);
             ListIterator noteListIterator = noteList.listIterator();
index ed557b5a8b107007708a0f8689cbbf0aadeaade3..6dbc997b34755683b3e7e116d62bb71715781e17 100644 (file)
@@ -227,7 +227,7 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager {
             if (contentList != null) {
                 ListIterator contentListIterator = contentList.listIterator();
                 while (contentListIterator.hasNext()) {
-                    KnuthElement element = (KnuthElement) contentListIterator.next();
+                    ListElement element = (ListElement) contentListIterator.next();
                     if (element instanceof KnuthBlockBox
                         && ((KnuthBlockBox) element).hasAnchors()) {
                         // element represents a line with footnote citations
@@ -402,10 +402,11 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager {
                     int lastIndex = (i == pbp.footnoteLastListIndex 
                             ? pbp.footnoteLastElementIndex : elementList.size() - 1);
 
-                    FootnoteBodyLayoutManager fblm = (FootnoteBodyLayoutManager)
-                            ((KnuthElement) elementList.getFirst()).getLayoutManager();
+                    SpaceResolver.performConditionalsNotification(elementList, 
+                            firstIndex, lastIndex, -1);
                     LayoutContext childLC = new LayoutContext(0);
-                    fblm.addAreas(new KnuthPossPosIter(elementList, firstIndex, lastIndex + 1), 
+                    AreaAdditionUtil.addAreas(null, 
+                            new KnuthPossPosIter(elementList, firstIndex, lastIndex + 1), 
                             childLC);
                 }
                 // set the offset from the top margin
@@ -424,6 +425,12 @@ public class PageSequenceLayoutManager extends AbstractLayoutManager {
             return childFLM;
         }
         
+        /** @see org.apache.fop.layoutmgr.AbstractBreaker#observeElementList(java.util.List) */
+        protected void observeElementList(List elementList) {
+            ElementListObserver.observe(elementList, "breaker", 
+                    ((PageSequence)pslm.getFObj()).getId());
+        }
+        
     }
     
     /**
index ae38b96d5978114101db20c168132b5ea5df374d..cc0c73c89451d89d1bdec820a07bd2e4be5ec6c4 100644 (file)
@@ -60,7 +60,7 @@ public abstract class PositionIterator implements Iterator {
         LayoutManager lm = getLM(nextObj);
         if (childLM == null) {
             childLM = lm;
-        } else if (childLM != lm) {
+        } else if (childLM != lm && lm != null) {
             // End of this sub-sequence with same child LM
             bHasNext = false;
             childLM = null;
diff --git a/src/java/org/apache/fop/layoutmgr/RelSide.java b/src/java/org/apache/fop/layoutmgr/RelSide.java
new file mode 100644 (file)
index 0000000..6371cff
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+/** Enum class for relative sides. */
+public final class RelSide {
+
+    /** the before side */
+    public static final RelSide BEFORE = new RelSide("before");
+    /** the after side */
+    public static final RelSide AFTER = new RelSide("after");
+    /** the start side */
+    public static final RelSide START = new RelSide("start");
+    /** the end side */
+    public static final RelSide END = new RelSide("end");
+    
+    private String name;
+
+    /**
+     * Constructor to add a new named item.
+     * @param name Name of the item.
+     */
+    private RelSide(String name) {
+        this.name = name;
+    }
+
+    /** @return the name of the enum */
+    public String getName() {
+        return this.name;
+    }
+    
+    /** @see java.lang.Object#toString() */
+    public String toString() {
+        return "RelSide:" + name;
+    }
+    
+}
diff --git a/src/java/org/apache/fop/layoutmgr/SpaceElement.java b/src/java/org/apache/fop/layoutmgr/SpaceElement.java
new file mode 100644 (file)
index 0000000..ef365b7
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import org.apache.fop.datatypes.PercentBaseContext;
+import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.properties.SpaceProperty;
+import org.apache.fop.traits.MinOptMax;
+
+/**
+ * This class represents an unresolved space element.
+ */
+public class SpaceElement extends UnresolvedListElementWithLength {
+
+    private int precedence;
+    
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     * @param space the space property
+     * @param side the side to which this space element applies.
+     * @param isFirst true if this is a space-before of the first area generated.
+     * @param isLast true if this is a space-after of the last area generated.
+     * @param context the property evaluation context
+     */
+    public SpaceElement(Position position, SpaceProperty space, RelSide side, 
+            boolean isFirst, boolean isLast,
+            PercentBaseContext context) {
+        super(position, 
+                MinOptMaxUtil.toMinOptMax(
+                        space.getSpace().getLengthRange(), 
+                context), side, space.isDiscard(), isFirst, isLast);
+        int en = space.getSpace().getPrecedence().getEnum();
+        if (en == Constants.EN_FORCE) {
+            this.precedence = Integer.MAX_VALUE;
+        } else {
+            this.precedence = space.getSpace().getPrecedence().getNumber().intValue(); 
+        }
+    }
+    
+    /** @return true if the space is forcing. */
+    public boolean isForcing() {
+        return this.precedence == Integer.MAX_VALUE;
+    }
+
+    /** @return the precedence of the space */
+    public int getPrecedence() {
+        return this.precedence;
+    }
+    
+    /** @see org.apache.fop.layoutmgr.UnresolvedListElementWithLength */
+    public void notifyLayoutManager(MinOptMax effectiveLength) {
+        LayoutManager lm = getOriginatingLayoutManager();
+        if (lm instanceof ConditionalElementListener) {
+            ((ConditionalElementListener)lm).notifySpace(
+                    getSide(), effectiveLength);
+        } else {
+            log.warn("Cannot notify LM. It does not implement ConditionalElementListener:" 
+                    + lm.getClass().getName());
+        }
+    }
+    
+    /** @see java.lang.Object#toString() */
+    public String toString() {
+        StringBuffer sb = new StringBuffer("Space[");
+        sb.append(super.toString());
+        sb.append(", precedence=");
+        if (isForcing()) {
+            sb.append("forcing");
+        } else {
+            sb.append(getPrecedence());
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+
+}
diff --git a/src/java/org/apache/fop/layoutmgr/SpaceResolver.java b/src/java/org/apache/fop/layoutmgr/SpaceResolver.java
new file mode 100644 (file)
index 0000000..45e9990
--- /dev/null
@@ -0,0 +1,737 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.fop.traits.MinOptMax;
+
+/**
+ * This class resolves spaces and conditional borders and paddings by replacing the
+ * UnresolvedListElements descendants by the right combination of KnuthElements on an element
+ * list.
+ */
+public class SpaceResolver {
+
+    /** Logger instance */
+    protected static Log log = LogFactory.getLog(SpaceResolver.class);
+    
+    private UnresolvedListElementWithLength[] firstPart;
+    private BreakElement breakPoss;
+    private UnresolvedListElementWithLength[] secondPart;
+    private UnresolvedListElementWithLength[] noBreak;
+    
+    private MinOptMax[] firstPartLengths;
+    private MinOptMax[] secondPartLengths;
+    private MinOptMax[] noBreakLengths;
+    
+    private boolean isFirst;
+    private boolean isLast;
+    
+    /**
+     * Main constructor.
+     * @param first Element list before a break (optional)
+     * @param breakPoss Break possibility (optional)
+     * @param second Element list after a break (or if no break possibility in vicinity)
+     * @param isFirst Resolution at the beginning of a (full) element list
+     * @param isLast Resolution at the end of a (full) element list
+     */
+    public SpaceResolver(List first, BreakElement breakPoss, List second, 
+            boolean isFirst, boolean isLast) {
+        this.isFirst = isFirst;
+        this.isLast = isLast;
+        //Create combined no-break list
+        int c = 0;
+        if (first != null) {
+            c += first.size();
+        }
+        if (second != null) {
+            c += second.size();
+        }
+        noBreak = new UnresolvedListElementWithLength[c];
+        noBreakLengths = new MinOptMax[c];
+        int i = 0;
+        ListIterator iter;
+        if (first != null) {
+            iter = first.listIterator();
+            while (iter.hasNext()) {
+                noBreak[i] = (UnresolvedListElementWithLength)iter.next();
+                noBreakLengths[i] = noBreak[i].getLength();
+                i++;
+            }
+        }
+        if (second != null) {
+            iter = second.listIterator();
+            while (iter.hasNext()) {
+                noBreak[i] = (UnresolvedListElementWithLength)iter.next();
+                noBreakLengths[i] = noBreak[i].getLength();
+                i++;
+            }
+        }
+
+        //Add pending elements from higher level FOs
+        if (breakPoss != null) {
+            if (breakPoss.getPendingAfterMarks() != null) {
+                if (log.isTraceEnabled()) {
+                    log.trace("    adding pending before break: " 
+                            + breakPoss.getPendingAfterMarks());
+                }
+                first.addAll(0, breakPoss.getPendingAfterMarks());
+            }
+            if (breakPoss.getPendingBeforeMarks() != null) {
+                if (log.isTraceEnabled()) {
+                    log.trace("    adding pending after break: " 
+                            + breakPoss.getPendingBeforeMarks());
+                }
+                second.addAll(0, breakPoss.getPendingBeforeMarks());
+            }
+        }
+        if (log.isTraceEnabled()) {
+            log.trace("before: " + first);
+            log.trace("  break: " + breakPoss);
+            log.trace("after: " + second);
+            log.trace("NO-BREAK: " + toString(noBreak, noBreakLengths));
+        }
+
+        if (first != null) {
+            firstPart = new UnresolvedListElementWithLength[first.size()];
+            firstPartLengths = new MinOptMax[firstPart.length];
+            first.toArray(firstPart);
+            for (i = 0; i < firstPart.length; i++) {
+                firstPartLengths[i] = firstPart[i].getLength();
+            }
+        }
+        this.breakPoss = breakPoss;
+        if (second != null) {
+            secondPart = new UnresolvedListElementWithLength[second.size()];
+            secondPartLengths = new MinOptMax[secondPart.length];
+            second.toArray(secondPart);
+            for (i = 0; i < secondPart.length; i++) {
+                secondPartLengths[i] = secondPart[i].getLength();
+            }
+        }
+        resolve();
+    }
+    
+    private String toString(Object[] arr1, Object[] arr2) {
+        if (arr1.length != arr2.length) {
+            new IllegalArgumentException("The length of both arrays must be equal");
+        }
+        StringBuffer sb = new StringBuffer("[");
+        for (int i = 0; i < arr1.length; i++) {
+            if (i > 0) {
+                sb.append(", ");
+            }
+            sb.append(String.valueOf(arr1[i]));
+            sb.append("/");
+            sb.append(String.valueOf(arr2[i]));
+        }
+        sb.append("]");
+        return sb.toString();
+    }
+    
+    private void removeConditionalBorderAndPadding(
+                UnresolvedListElement[] elems, MinOptMax[] lengths, boolean reverse) {
+        for (int i = 0; i < elems.length; i++) {
+            int effIndex;
+            if (reverse) {
+                effIndex = elems.length - 1 - i;
+            } else {
+                effIndex = i;
+            }
+            if (elems[effIndex] instanceof BorderOrPaddingElement) {
+                BorderOrPaddingElement bop = (BorderOrPaddingElement)elems[effIndex];
+                if (bop.isConditional() && !(bop.isFirst() || bop.isLast())) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("Nulling conditional element: " + bop);
+                    }
+                    lengths[effIndex] = null;
+                }
+            }
+        }
+        if (log.isTraceEnabled() && elems.length > 0) {
+            log.trace("-->Resulting list: " + toString(elems, lengths));
+        }
+    }
+    
+    private void performSpaceResolutionRule1(UnresolvedListElement[] elems, MinOptMax[] lengths,
+                    boolean reverse) {
+        for (int i = 0; i < elems.length; i++) {
+            int effIndex;
+            if (reverse) {
+                effIndex = elems.length - 1 - i;
+            } else {
+                effIndex = i;
+            }
+            if (lengths[effIndex] == null) {
+                //Zeroed border or padding doesn't create a fence
+                continue;
+            } else if (elems[effIndex] instanceof BorderOrPaddingElement) {
+                //Border or padding form fences!
+                break;
+            } else if (!elems[effIndex].isConditional()) {
+                break;
+            }
+            if (log.isDebugEnabled()) {
+                log.debug("Nulling conditional element using 4.3.1, rule 1: " + elems[effIndex]);
+            }
+            lengths[effIndex] = null;
+        }
+        if (log.isTraceEnabled() && elems.length > 0) {
+            log.trace("-->Resulting list: " + toString(elems, lengths));
+        }
+    }
+
+    private void performSpaceResolutionRules2to3(UnresolvedListElement[] elems, 
+            MinOptMax[] lengths, int start, int end) {
+        if (log.isTraceEnabled()) {
+            log.trace("rule 2-3: " + start + "-" + end);
+        }
+        SpaceElement space;
+        int remaining;
+        
+        //Rule 2 (4.3.1, XSL 1.0)
+        boolean hasForcing = false;
+        remaining = 0;
+        for (int i = start; i <= end; i++) {
+            if (lengths[i] == null) {
+                continue;
+            }
+            remaining++;
+            space = (SpaceElement)elems[i];
+            if (space.isForcing()) {
+                hasForcing = true;
+                break;
+            }
+        }
+        if (remaining == 0) {
+            return; //shortcut
+        }
+        if (hasForcing) {
+            for (int i = start; i <= end; i++) {
+                if (lengths[i] == null) {
+                    continue;
+                }
+                space = (SpaceElement)elems[i];
+                if (!space.isForcing()) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("Nulling non-forcing space-specifier using 4.3.1, rule 2: " 
+                                + elems[i]);
+                    }
+                    lengths[i] = null;
+                }
+            }
+            return; //If rule is triggered skip rule 3
+        }
+        
+        //Rule 3 (4.3.1, XSL 1.0)
+        //Determine highes precedence
+        int highestPrecedence = Integer.MIN_VALUE;
+        for (int i = start; i <= end; i++) {
+            if (lengths[i] == null) {
+                continue;
+            }
+            space = (SpaceElement)elems[i];
+            highestPrecedence = Math.max(highestPrecedence, space.getPrecedence());
+        }
+        if (highestPrecedence != 0 && log.isDebugEnabled()) {
+            log.debug("Highest precedence is " + highestPrecedence);
+        }
+        //Suppress space-specifiers with lower precedence
+        remaining = 0;
+        int greatestOptimum = Integer.MIN_VALUE;
+        for (int i = start; i <= end; i++) {
+            if (lengths[i] == null) {
+                continue;
+            }
+            space = (SpaceElement)elems[i];
+            if (space.getPrecedence() != highestPrecedence) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Nulling space-specifier with precedence " 
+                            + space.getPrecedence() + " using 4.3.1, rule 3: " 
+                            + elems[i]);
+                }
+                lengths[i] = null;
+            } else {
+                greatestOptimum = Math.max(greatestOptimum, space.getLength().opt);
+                remaining++;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug("Greatest optimum: " + greatestOptimum);
+        }
+        if (remaining <= 1) {
+            return;
+        }
+        //Suppress space-specifiers with smaller optimum length
+        remaining = 0;
+        for (int i = start; i <= end; i++) {
+            if (lengths[i] == null) {
+                continue;
+            }
+            space = (SpaceElement)elems[i];
+            if (space.getLength().opt < greatestOptimum) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Nulling space-specifier with smaller optimum length "
+                            + "using 4.3.1, rule 3: " 
+                            + elems[i]);
+                }
+                lengths[i] = null;
+            } else {
+                remaining++;
+            }
+        }
+        if (remaining <= 1) {
+            return;
+        }
+        //Construct resolved space-specifier from the remaining spaces
+        int min = Integer.MIN_VALUE;
+        int max = Integer.MAX_VALUE;
+        for (int i = start; i <= end; i++) {
+            if (lengths[i] == null) {
+                continue;
+            }
+            space = (SpaceElement)elems[i];
+            min = Math.max(min, space.getLength().min);
+            max = Math.min(max, space.getLength().max);
+            if (remaining > 1) {
+                if (log.isDebugEnabled()) {
+                    log.debug("Nulling non-last space-specifier using 4.3.1, rule 3, second part: " 
+                            + elems[i]);
+                }
+                lengths[i] = null;
+                remaining--;
+            } else {
+                lengths[i].min = min;
+                lengths[i].max = max;
+            }
+        }
+
+        if (log.isTraceEnabled() && elems.length > 0) {
+            log.trace("Remaining spaces: " + remaining);
+            log.trace("-->Resulting list: " + toString(elems, lengths));
+        }
+    }
+    
+    private void performSpaceResolutionRules2to3(UnresolvedListElement[] elems,
+            MinOptMax[] lengths) {
+        int start = 0;
+        int i = start;
+        while (i < elems.length) {
+            if (elems[i] instanceof SpaceElement) {
+                while (i < elems.length) {
+                    if (elems[i] == null || elems[i] instanceof SpaceElement) {
+                        i++;
+                    } else {
+                        break;
+                    }
+                }
+                performSpaceResolutionRules2to3(elems, lengths, start, i - 1);
+            }
+            i++;
+            start = i;
+        }
+    }
+    
+    private boolean hasFirstPart() {
+        return firstPart != null && firstPart.length > 0;
+    }
+    
+    private boolean hasSecondPart() {
+        return secondPart != null && secondPart.length > 0;
+    }
+    
+    private void resolve() {
+        if (breakPoss != null) {
+            if (hasFirstPart()) {
+                removeConditionalBorderAndPadding(firstPart, firstPartLengths, true);
+                performSpaceResolutionRule1(firstPart, firstPartLengths, true);
+                performSpaceResolutionRules2to3(firstPart, firstPartLengths);
+            }
+            if (hasSecondPart()) {
+                removeConditionalBorderAndPadding(secondPart, secondPartLengths, false);
+                performSpaceResolutionRule1(secondPart, secondPartLengths, false);
+                performSpaceResolutionRules2to3(secondPart, secondPartLengths);
+            }
+            if (noBreak != null) {
+                performSpaceResolutionRules2to3(noBreak, noBreakLengths);
+            }
+        } else {
+            if (isFirst) {
+                removeConditionalBorderAndPadding(secondPart, secondPartLengths, false);
+                performSpaceResolutionRule1(secondPart, secondPartLengths, false);
+            }
+            if (isLast) {
+                removeConditionalBorderAndPadding(firstPart, firstPartLengths, true);
+                performSpaceResolutionRule1(firstPart, firstPartLengths, true);
+            }
+            
+            if (hasFirstPart()) {
+                //Now that we've handled isFirst/isLast conditions, we need to look at the
+                //active part in its normal order so swap it back.
+                log.trace("Swapping first and second parts.");
+                UnresolvedListElementWithLength[] tempList;
+                MinOptMax[] tempLengths;
+                tempList = secondPart;
+                tempLengths = secondPartLengths;
+                secondPart = firstPart;
+                secondPartLengths = firstPartLengths;
+                firstPart = tempList;
+                firstPartLengths = tempLengths;
+                if (hasFirstPart()) {
+                    throw new IllegalStateException("Didn't expect more than one parts in a"
+                            + "no-break condition.");
+                }
+            }
+            performSpaceResolutionRules2to3(secondPart, secondPartLengths);
+        }
+    }
+    
+    private MinOptMax sum(MinOptMax[] lengths) {
+        MinOptMax sum = new MinOptMax();
+        for (int i = 0; i < lengths.length; i++) {
+            if (lengths[i] != null) {
+                sum.add(lengths[i]);
+            }
+        }
+        return sum;
+    }
+    
+    private void generate(ListIterator iter) {
+        MinOptMax noBreakLength = new MinOptMax();
+        MinOptMax glue1; //space before break possibility if break occurs
+        //MinOptMax glue2; //difference between glue 1 and 3 when no break occurs
+        MinOptMax glue3; //space after break possibility if break occurs
+        glue1 = sum(firstPartLengths);
+        glue3 = sum(secondPartLengths);
+        noBreakLength = sum(noBreakLengths);
+        
+        //This doesn't produce the right glue2
+        //glue2 = new MinOptMax(noBreakLength);
+        //glue2.subtract(glue1);
+        //glue2.subtract(glue3);
+        
+        int glue2w = noBreakLength.opt - glue1.opt - glue3.opt;
+        int glue2stretch = (noBreakLength.max - noBreakLength.opt);
+        int glue2shrink = (noBreakLength.opt - noBreakLength.min);
+        glue2stretch -= glue1.max - glue1.opt;
+        glue2stretch -= glue3.max - glue3.opt;
+        glue2shrink -= glue1.opt - glue1.min;
+        glue2shrink -= glue3.opt - glue3.min;
+        
+        boolean hasPrecedingNonBlock = false;
+        if (log.isDebugEnabled()) {
+            log.debug("noBreakLength=" + noBreakLength 
+                    + ", glue1=" + glue1 
+                    + ", glue2=" + glue2w + "+" + glue2stretch + "-" + glue2shrink 
+                    + ", glue3=" + glue3);
+        }
+        if (breakPoss != null) {
+            if (glue1.isNonZero()) {
+                iter.add(new KnuthPenalty(0, KnuthPenalty.INFINITE, 
+                        false, (Position)null, true));
+                iter.add(new KnuthGlue(glue1.opt, glue1.max - glue1.opt, glue1.opt - glue1.min, 
+                        (Position)null, true));
+            }
+            iter.add(new KnuthPenalty(breakPoss.getPenaltyWidth(), breakPoss.getPenaltyValue(), 
+                    false, breakPoss.getBreakClass(), 
+                    new SpaceHandlingBreakPosition(this, breakPoss), false));
+            //if (glue2.isNonZero()) {
+            if (glue2w != 0 || glue2stretch != 0 || glue2shrink != 0) {
+                /*
+                iter.add(new KnuthGlue(glue2.opt, glue2.max - glue2.opt, glue2.opt - glue2.min, 
+                        (Position)null, true));
+                        */
+                iter.add(new KnuthGlue(glue2w, glue2stretch, glue2shrink, 
+                        (Position)null, true));
+            }
+        } else {
+            if (glue1.isNonZero()) {
+                throw new IllegalStateException("glue1 should be 0 in this case");
+            }
+        }
+        Position pos = null;
+        if (breakPoss == null) {
+            pos = new SpaceHandlingPosition(this);
+        }
+        if (glue3.isNonZero() || pos != null) {
+            iter.add(new KnuthBox(0, pos, true));
+        }
+        if (glue3.isNonZero()) {
+            iter.add(new KnuthPenalty(0, KnuthPenalty.INFINITE, 
+                    false, (Position)null, true));
+            iter.add(new KnuthGlue(glue3.opt, glue3.max - glue3.opt, glue3.opt - glue3.min, 
+                    (Position)null, true));
+            hasPrecedingNonBlock = true;
+        }
+        if (isLast && hasPrecedingNonBlock) {
+            //Otherwise, the preceding penalty and glue will be cut off
+            iter.add(new KnuthBox(0, (Position)null, true));
+        }
+    }
+    
+    /**
+     * Position class for break possibilities. It is used to notify layout manager about the
+     * effective spaces and conditional lengths.
+     */
+    public class SpaceHandlingBreakPosition extends Position {
+
+        private SpaceResolver resolver;
+        private Position originalPosition;
+        
+        /**
+         * Main constructor.
+         * @param resolver the space resolver that provides the info about the actual situation
+         */
+        public SpaceHandlingBreakPosition(SpaceResolver resolver, BreakElement breakPoss) {
+            super(null);
+            this.resolver = resolver;
+            this.originalPosition = breakPoss.getPosition();
+            //Unpack since the SpaceHandlingBreakPosition is a non-wrapped Position, too
+            while (this.originalPosition instanceof NonLeafPosition) {
+                this.originalPosition = this.originalPosition.getPosition();
+            }
+        }
+        
+        /** @return the space resolver */
+        public SpaceResolver getSpaceResolver() {
+            return this.resolver;
+        }
+        
+        /**
+         * Notifies all affected layout managers about the current situation in the part to be
+         * handled for area generation.
+         * @param isBreakSituation true if this is a break situation.
+         * @param side defines to notify about the situation whether before or after the break.
+         *             May be null if isBreakSituation is null. 
+         */
+        public void notifyBreakSituation(boolean isBreakSituation, RelSide side) {
+            if (isBreakSituation) {
+                if (RelSide.BEFORE == side) {
+                    for (int i = 0; i < resolver.secondPart.length; i++) {
+                        resolver.secondPart[i].notifyLayoutManager(resolver.secondPartLengths[i]);
+                    }
+                } else {
+                    for (int i = 0; i < resolver.firstPart.length; i++) {
+                        resolver.firstPart[i].notifyLayoutManager(resolver.firstPartLengths[i]);
+                    }
+                }
+            } else {
+                for (int i = 0; i < resolver.noBreak.length; i++) {
+                    resolver.noBreak[i].notifyLayoutManager(resolver.noBreakLengths[i]);
+                }
+            }
+        }
+        
+        /** @see java.lang.Object#toString() */
+        public String toString() {
+            StringBuffer sb = new StringBuffer();
+            sb.append("SpaceHandlingBreakPosition(");
+            sb.append(this.originalPosition);
+            sb.append(")");
+            return sb.toString();
+        }
+
+        /** 
+         * @return the original Position instance set at the BreakElement that this Position was
+         *         created for.
+         */
+        public Position getOriginalBreakPosition() {
+            return this.originalPosition;
+        }
+    }
+    
+    /**
+     * Position class for no-break situations. It is used to notify layout manager about the
+     * effective spaces and conditional lengths.
+     */
+    public class SpaceHandlingPosition extends Position {
+
+        private SpaceResolver resolver;
+        
+        /**
+         * Main constructor.
+         * @param resolver the space resolver that provides the info about the actual situation
+         */
+        public SpaceHandlingPosition(SpaceResolver resolver) {
+            super(null);
+            this.resolver = resolver;
+        }
+        
+        /** @return the space resolver */
+        public SpaceResolver getSpaceResolver() {
+            return this.resolver;
+        }
+        
+        /**
+         * Notifies all affected layout managers about the current situation in the part to be
+         * handled for area generation.
+         */
+        public void notifySpaceSituation() {
+            if (resolver.breakPoss != null) {
+                throw new IllegalStateException("Only applicable to no-break situations");
+            }
+            for (int i = 0; i < resolver.secondPart.length; i++) {
+                resolver.secondPart[i].notifyLayoutManager(resolver.secondPartLengths[i]);
+            }
+        }
+        
+        /** @see java.lang.Object#toString() */
+        public String toString() {
+            StringBuffer sb = new StringBuffer();
+            sb.append("SpaceHandlingPosition");
+            return sb.toString();
+        }
+    }
+    
+    /**
+     * Resolves unresolved elements applying the space resolution rules defined in 4.3.1.
+     * @param elems the element list
+     */
+    public static void resolveElementList(LinkedList elems) {
+        if (log.isTraceEnabled()) {
+            log.trace(elems);
+        }
+        boolean first = true;
+        boolean last = false;
+        boolean skipNextElement = false;
+        List unresolvedFirst = new java.util.ArrayList();
+        List unresolvedSecond = new java.util.ArrayList();
+        List currentGroup;
+        ListIterator iter = elems.listIterator();
+        while (iter.hasNext()) {
+            ListElement el = (ListElement)iter.next();
+            if (el.isUnresolvedElement()) {
+                if (log.isTraceEnabled()) {
+                    log.trace("unresolved found: " + el + " " + first + "/" + last);
+                }
+                BreakElement breakPoss = null;
+                //Clear temp lists
+                unresolvedFirst.clear();
+                unresolvedSecond.clear();
+                //Collect groups
+                if (el instanceof BreakElement) {
+                    breakPoss = (BreakElement)el;
+                    currentGroup = unresolvedSecond;
+                } else {
+                    currentGroup = unresolvedFirst;
+                    currentGroup.add(el);
+                }
+                iter.remove();
+                last = true;
+                skipNextElement = true;
+                while (iter.hasNext()) {
+                    el = (ListElement)iter.next();
+                    if (el instanceof BreakElement && breakPoss != null) {
+                        skipNextElement = false;
+                        last = false;
+                        break;
+                    } else if (currentGroup == unresolvedFirst && (el instanceof BreakElement)) {
+                        breakPoss = (BreakElement)el;
+                        iter.remove();
+                        currentGroup = unresolvedSecond;
+                    } else if (el.isUnresolvedElement()) {
+                        currentGroup.add(el);
+                        iter.remove();
+                    } else {
+                        last = false;
+                        break;
+                    }
+                }
+                //last = !iter.hasNext();
+                if (breakPoss == null && unresolvedSecond.size() == 0 && !last) {
+                    log.trace("Swap first and second parts in no-break condition,"
+                            + " second part is empty.");
+                    //The first list is reversed, so swap if this shouldn't happen
+                    List swapList = unresolvedSecond;
+                    unresolvedSecond = unresolvedFirst;
+                    unresolvedFirst = swapList;
+                }
+                
+                log.debug("----start space resolution (first=" + first + ", last=" + last + ")...");
+                SpaceResolver resolver = new SpaceResolver(
+                        unresolvedFirst, breakPoss, unresolvedSecond, first, last);
+                if (!last) {
+                    iter.previous();
+                }
+                resolver.generate(iter);
+                if (!last && skipNextElement) {
+                    iter.next();
+                }
+                log.debug("----end space resolution.");
+            }
+            first = false;
+        }
+    }
+    
+    /**
+     * Inspects an effective element list and notifies all layout managers about the state of
+     * the spaces and conditional lengths.
+     * @param effectiveList the effective element list
+     * @param startElementIndex index of the first element in the part to be processed
+     * @param endElementIndex index of the last element in the part to be processed
+     * @param lastBreak index of the the break possibility just before this part (used to
+     *                  identify a break condition, lastBreak <= 0 represents a no-break condition)
+     */
+    public static void performConditionalsNotification(List effectiveList, 
+            int startElementIndex, int endElementIndex, int lastBreak) {
+        KnuthElement el = null;
+        if (lastBreak > 0) {
+            el = (KnuthElement)effectiveList.get(lastBreak);
+        }
+        SpaceResolver.SpaceHandlingBreakPosition beforeBreak = null;
+        SpaceResolver.SpaceHandlingBreakPosition afterBreak = null;
+        if (el != null && el.isPenalty()) {
+            Position pos = el.getPosition();
+            if (pos instanceof SpaceResolver.SpaceHandlingBreakPosition) {
+                beforeBreak = (SpaceResolver.SpaceHandlingBreakPosition)pos; 
+                beforeBreak.notifyBreakSituation(true, RelSide.BEFORE);
+            }
+        }
+        el = (KnuthElement)effectiveList.get(endElementIndex);
+        if (el != null && el.isPenalty()) {
+            Position pos = el.getPosition();
+            if (pos instanceof SpaceResolver.SpaceHandlingBreakPosition) {
+                afterBreak = (SpaceResolver.SpaceHandlingBreakPosition)pos; 
+                afterBreak.notifyBreakSituation(true, RelSide.AFTER);
+            }
+        }
+        for (int i = startElementIndex; i <= endElementIndex; i++) {
+            Position pos = ((KnuthElement)effectiveList.get(i)).getPosition();
+            if (pos instanceof SpaceResolver.SpaceHandlingPosition) {
+                ((SpaceResolver.SpaceHandlingPosition)pos).notifySpaceSituation();
+            } else if (pos instanceof SpaceResolver.SpaceHandlingBreakPosition) {
+                SpaceResolver.SpaceHandlingBreakPosition noBreak;
+                noBreak = (SpaceResolver.SpaceHandlingBreakPosition)pos;
+                if (noBreak != beforeBreak && noBreak != afterBreak) {
+                    noBreak.notifyBreakSituation(false, null);
+                }
+            }
+        }
+    }
+    
+    
+
+}
index 949594bebb2f662331ca7724152ca09f9995327f..34da18505be6e3328358ccf20c066900fafa5621 100644 (file)
 package org.apache.fop.layoutmgr;
 
 import java.util.LinkedList;
+import java.util.List;
 import java.util.ListIterator;
 
 import org.apache.fop.area.RegionReference;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
+import org.apache.fop.fo.pagination.PageSequence;
 import org.apache.fop.fo.pagination.SideRegion;
 import org.apache.fop.fo.pagination.StaticContent;
 import org.apache.fop.layoutmgr.inline.InlineLevelLayoutManager;
@@ -251,6 +253,16 @@ public class StaticContentLayoutManager extends BlockStackingLayoutManager {
             this.displayAlign = displayAlign;
         }
 
+        /** @see org.apache.fop.layoutmgr.AbstractBreaker#observeElementList(java.util.List) */
+        protected void observeElementList(List elementList) {
+            String elementListID = getStaticContentFO().getFlowName();
+            String pageSequenceID = ((PageSequence)lm.getParent().getFObj()).getId();
+            if (pageSequenceID != null && pageSequenceID.length() > 0) {
+                elementListID += "-" + pageSequenceID;
+            }
+            ElementListObserver.observe(elementList, "static-content", elementListID);
+        }
+        
         /** @see org.apache.fop.layoutmgr.AbstractBreaker#isPartOverflowRecoveryActivated() */
         protected boolean isPartOverflowRecoveryActivated() {
             //For side regions, this must be disabled because of wanted overflow.
@@ -287,9 +299,9 @@ public class StaticContentLayoutManager extends BlockStackingLayoutManager {
                 }
                 if (returnedList != null) {
                     lm.wrapPositionElements(returnedList, returnList);
-                    //returnList.addAll(returnedList);
                 }
             }
+            SpaceResolver.resolveElementList(returnList);
             setFinished(true);
             return returnList;
         }
index 1dcf52b62d1468600e02f9de49d9b76eb2d3cc0d..89d03fff95cbd64002e03a273471c53e3d907a4b 100644 (file)
@@ -21,6 +21,7 @@ package org.apache.fop.layoutmgr;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.fop.traits.BorderProps;
+import org.apache.fop.traits.MinOptMax;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Trait;
 import org.apache.fop.datatypes.LengthBase;
@@ -105,12 +106,13 @@ public class TraitSetter {
     }
 
     /**
-     * Add borders to an area.
+     * Add borders to an area. Note: this method also adds unconditional padding. Don't use!
      * Layout managers that create areas with borders can use this to
      * add the borders to the area.
      * @param area the area to set the traits on.
      * @param bordProps border properties
      * @param context Property evaluation context
+     * @deprecated Call the other addBorders() method and addPadding separately.
      */
     public static void addBorders(Area area, CommonBorderPaddingBackground bordProps,
                                 PercentBaseContext context) {
@@ -134,6 +136,40 @@ public class TraitSetter {
         addPadding(area, bordProps, context);
     }
 
+    /**
+     * Add borders to an area.
+     * Layout managers that create areas with borders can use this to
+     * add the borders to the area.
+     * @param area the area to set the traits on.
+     * @param bordProps border properties
+     * @param discardBefore true if the before border should be discarded
+     * @param discardAfter true if the after border should be discarded
+     * @param discardStart true if the start border should be discarded
+     * @param discardEnd true if the end border should be discarded
+     * @param context Property evaluation context
+     */
+    public static void addBorders(Area area, CommonBorderPaddingBackground bordProps,
+                boolean discardBefore, boolean discardAfter,
+                boolean discardStart, boolean discardEnd,
+                PercentBaseContext context) {
+        BorderProps bps = getBorderProps(bordProps, CommonBorderPaddingBackground.BEFORE);
+        if (bps != null && !discardBefore) {
+            area.addTrait(Trait.BORDER_BEFORE, bps);
+        }
+        bps = getBorderProps(bordProps, CommonBorderPaddingBackground.AFTER);
+        if (bps != null && !discardAfter) {
+            area.addTrait(Trait.BORDER_AFTER, bps);
+        }
+        bps = getBorderProps(bordProps, CommonBorderPaddingBackground.START);
+        if (bps != null && !discardStart) {
+            area.addTrait(Trait.BORDER_START, bps);
+        }
+        bps = getBorderProps(bordProps, CommonBorderPaddingBackground.END);
+        if (bps != null && !discardEnd) {
+            area.addTrait(Trait.BORDER_END, bps);
+        }
+    }
+
     /**
      * Add borders to an area for the collapsing border model in tables.
      * Layout managers that create areas with borders can use this to
@@ -174,25 +210,49 @@ public class TraitSetter {
 
     private static void addPadding(Area area, CommonBorderPaddingBackground bordProps, 
                                 PercentBaseContext context) {
-        int padding = bordProps.getPadding(CommonBorderPaddingBackground.START, false, context);
+        addPadding(area, bordProps, false, false, false, false, context);
+    }
+
+    /**
+     * Add padding to an area.
+     * Layout managers that create areas with padding can use this to
+     * add the borders to the area.
+     * @param area the area to set the traits on.
+     * @param bordProps border and padding properties
+     * @param discardBefore true if the before padding should be discarded
+     * @param discardAfter true if the after padding should be discarded
+     * @param discardStart true if the start padding should be discarded
+     * @param discardEnd true if the end padding should be discarded
+     * @param context Property evaluation context
+     */
+    public static void addPadding(Area area, CommonBorderPaddingBackground bordProps,
+                boolean discardBefore, boolean discardAfter,
+                boolean discardStart, boolean discardEnd,
+                PercentBaseContext context) {
+        int padding = bordProps.getPadding(CommonBorderPaddingBackground.BEFORE, 
+                discardBefore, context);
         if (padding != 0) {
-            area.addTrait(Trait.PADDING_START, new java.lang.Integer(padding));
+            area.addTrait(Trait.PADDING_BEFORE, new java.lang.Integer(padding));
         }
 
-        padding = bordProps.getPadding(CommonBorderPaddingBackground.END, false, context);
+        padding = bordProps.getPadding(CommonBorderPaddingBackground.AFTER, 
+                discardAfter, context);
         if (padding != 0) {
-            area.addTrait(Trait.PADDING_END, new java.lang.Integer(padding));
+            area.addTrait(Trait.PADDING_AFTER, new java.lang.Integer(padding));
         }
 
-        padding = bordProps.getPadding(CommonBorderPaddingBackground.BEFORE, false, context);
+        padding = bordProps.getPadding(CommonBorderPaddingBackground.START, 
+                discardStart, context);
         if (padding != 0) {
-            area.addTrait(Trait.PADDING_BEFORE, new java.lang.Integer(padding));
+            area.addTrait(Trait.PADDING_START, new java.lang.Integer(padding));
         }
 
-        padding = bordProps.getPadding(CommonBorderPaddingBackground.AFTER, false, context);
+        padding = bordProps.getPadding(CommonBorderPaddingBackground.END, 
+                discardEnd, context);
         if (padding != 0) {
-            area.addTrait(Trait.PADDING_AFTER, new java.lang.Integer(padding));
+            area.addTrait(Trait.PADDING_END, new java.lang.Integer(padding));
         }
+
     }
     
     private static BorderProps getBorderProps(CommonBorderPaddingBackground bordProps, int side) {
@@ -254,9 +314,9 @@ public class TraitSetter {
                         width += backProps.getPaddingEnd(false, context);
                         back.setHoriz(backProps.backgroundPositionHorizontal.getValue(
                                 new SimplePercentBaseContext(context, 
-                                                             LengthBase.IMAGE_BACKGROUND_POSITION_HORIZONTAL,
-                                                             (width - back.getFopImage().getIntrinsicWidth())
-                                                            )
+                                    LengthBase.IMAGE_BACKGROUND_POSITION_HORIZONTAL,
+                                    (width - back.getFopImage().getIntrinsicWidth())
+                                )
                             ));
                     } else {
                         //TODO Area IPD has to be set for this to work
@@ -275,9 +335,9 @@ public class TraitSetter {
                         height += backProps.getPaddingAfter(false, context);
                         back.setVertical(backProps.backgroundPositionVertical.getValue(
                                 new SimplePercentBaseContext(context, 
-                                                             LengthBase.IMAGE_BACKGROUND_POSITION_VERTICAL,
-                                                             (height - back.getFopImage().getIntrinsicHeight())
-                                                            )
+                                     LengthBase.IMAGE_BACKGROUND_POSITION_VERTICAL,
+                                     (height - back.getFopImage().getIntrinsicHeight())
+                                )
                             ));
                     } else {
                         //TODO Area BPD has to be set for this to work
@@ -329,6 +389,32 @@ public class TraitSetter {
         }
     }
 
+    public static int getEffectiveSpace(double adjust, MinOptMax space) {
+        if (space == null) {
+            return 0;
+        }
+        int sp = space.opt;
+        if (adjust > 0) {
+            sp = sp + (int)(adjust * (space.max - space.opt));
+        } else {
+            sp = sp + (int)(adjust * (space.opt - space.min));
+        }
+        return sp;
+    }
+    
+    public static void addSpaceBeforeAfter(Area area, double adjust, 
+            MinOptMax spaceBefore, MinOptMax spaceAfter) {
+        int space;
+        space = getEffectiveSpace(adjust, spaceBefore);
+        if (space != 0) {
+            area.addTrait(Trait.SPACE_BEFORE, new Integer(space));
+        }
+        space = getEffectiveSpace(adjust, spaceAfter);
+        if (space != 0) {
+            area.addTrait(Trait.SPACE_AFTER, new Integer(space));
+        }
+    }
+    
     /**
      * Sets the traits for breaks on an area.
      * @param area the area to set the traits on.
diff --git a/src/java/org/apache/fop/layoutmgr/UnresolvedListElement.java b/src/java/org/apache/fop/layoutmgr/UnresolvedListElement.java
new file mode 100644 (file)
index 0000000..5f17db2
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+/**
+ * This class represents an unresolved list element.
+ */
+public abstract class UnresolvedListElement extends ListElement {
+
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     */
+    public UnresolvedListElement(Position position) {
+        super(position);
+    }
+    
+    /** @return true if the element is conditional (conditionality="discard") */
+    public abstract boolean isConditional();
+    
+    /** @return the layout manager that created this ListElement */
+    protected LayoutManager getOriginatingLayoutManager() {
+        Position pos = getPosition();
+        while (pos instanceof NonLeafPosition && pos.getPosition() != null) {
+            pos = pos.getPosition();
+        }
+        return pos.getLM();
+    }
+    
+}
diff --git a/src/java/org/apache/fop/layoutmgr/UnresolvedListElementWithLength.java b/src/java/org/apache/fop/layoutmgr/UnresolvedListElementWithLength.java
new file mode 100644 (file)
index 0000000..57637bb
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * 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$ */
+
+package org.apache.fop.layoutmgr;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.fop.traits.MinOptMax;
+
+/**
+ * This class represents an unresolved list element element with a (conditional) length. This
+ * is the base class for spaces, borders and paddings.
+ */
+public abstract class UnresolvedListElementWithLength extends UnresolvedListElement {
+
+    /** Logger instance */
+    protected static Log log = LogFactory.getLog(UnresolvedListElementWithLength.class);
+    
+    private MinOptMax length;
+    private boolean conditional;
+    private RelSide side;
+    private boolean isFirst;
+    private boolean isLast;
+    
+    /**
+     * Main constructor
+     * @param position the Position instance needed by the addAreas stage of the LMs.
+     * @param length the length of the element
+     * @param side the side to which this element applies
+     * @param conditional true if it's a conditional element (conditionality=discard)
+     * @param isFirst true if this is a space-before of the first area generated.
+     * @param isLast true if this is a space-after of the last area generated.
+     */
+    public UnresolvedListElementWithLength(Position position, MinOptMax length, 
+            RelSide side,
+            boolean conditional, boolean isFirst, boolean isLast) {
+        super(position);
+        this.length = length;
+        this.side = side;
+        this.conditional = conditional;
+        this.isFirst = isFirst;
+        this.isLast = isLast;
+    }
+    
+    /** @see org.apache.fop.layoutmgr.UnresolvedListElement#isConditional() */
+    public boolean isConditional() {
+        return this.conditional;
+    }
+    
+    /** @return the space as resolved MinOptMax instance */
+    public MinOptMax getLength() {
+        return this.length;
+    }
+    
+    /** @return the side this element was generated for */
+    public RelSide getSide() {
+        return this.side;
+    }
+    
+    /** @return true if this is a space-before of the first area generated. */
+    public boolean isFirst() {
+        return this.isFirst;
+    }
+    
+    /** @return true if this is a space-after of the last area generated. */
+    public boolean isLast() {
+        return this.isLast;
+    }
+    
+    /**
+     * Called to notify the affected layout manager about the effective length after resolution.
+     * This method is called once before each call to the layout manager's addAreas() method.
+     * @param effectiveLength the effective length after resolution (may be null which equals to
+     *                        zero effective length)
+     */
+    public abstract void notifyLayoutManager(MinOptMax effectiveLength);
+    
+    /** @see java.lang.Object#toString() */
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+        sb.append(getSide().getName()).append(", ");
+        sb.append(this.length.toString());
+        if (isConditional()) {
+            sb.append("[discard]");
+        } else {
+            sb.append("[RETAIN]");
+        }
+        if (isFirst()) {
+            sb.append("[first]");
+        }
+        if (isLast()) {
+            sb.append("[last]");
+        }
+        return sb.toString();
+    }
+    
+}
index e2aec76bd17a4e0fb96b60faacb66c6dc4b3160c..396851b67f7300ebe40dc549561e8e9363ad804d 100644 (file)
@@ -25,6 +25,7 @@ import org.apache.fop.fo.properties.CommonHyphenation;
 import org.apache.fop.hyphenation.Hyphenation;
 import org.apache.fop.hyphenation.Hyphenator;
 import org.apache.fop.layoutmgr.BlockLevelLayoutManager;
+import org.apache.fop.layoutmgr.BreakElement;
 import org.apache.fop.layoutmgr.BreakingAlgorithm;
 import org.apache.fop.layoutmgr.ElementListObserver;
 import org.apache.fop.layoutmgr.KnuthBlockBox;
@@ -642,7 +643,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager
         }
 
         //PHASE 2: Create line breaks
-        return createLineBreaks(context.getBPAlignment());
+        return createLineBreaks(context.getBPAlignment(), context);
         /*
         LineBreakPosition lbp = null;
         if (breakpoints == null) {
@@ -979,9 +980,10 @@ public class LineLayoutManager extends InlineStackingLayoutManager
     /**
      * Phase 2 of Knuth algorithm: find optimal break points.
      * @param alignment alignment in BP direction of the paragraph
+     * @param context the layout context
      * @return a list of Knuth elements representing broken lines
      */
-    private LinkedList createLineBreaks(int alignment) {
+    private LinkedList createLineBreaks(int alignment, LayoutContext context) {
 
         // find the optimal line breaking points for each paragraph
         ListIterator paragraphsIterator
@@ -1000,7 +1002,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager
         setFinished(true);
     
         //Post-process the line breaks found
-        return postProcessLineBreaks(alignment);
+        return postProcessLineBreaks(alignment, context);
     }
 
     /**
@@ -1143,17 +1145,19 @@ public class LineLayoutManager extends InlineStackingLayoutManager
     /**
      * Creates the element list in BP direction for the broken lines.
      * @param alignment the currently applicable vertical alignment
+     * @param context the layout context
      * @return the newly built element list
      */
-    private LinkedList postProcessLineBreaks(int alignment) {
+    private LinkedList postProcessLineBreaks(int alignment, LayoutContext context) {
     
         LinkedList returnList = new LinkedList();
         
         for (int p = 0; p < knuthParagraphs.size(); p++) {
             // null penalty between paragraphs
-            if (p > 0
-                && !((BlockLevelLayoutManager) parentLM).mustKeepTogether()) {
-                returnList.add(new KnuthPenalty(0, 0, false, new Position(this), false));
+            if (p > 0 && !((BlockLevelLayoutManager) parentLM).mustKeepTogether()) {
+                returnList.add(new BreakElement(
+                        new Position(this), 0, context));
+                //returnList.add(new KnuthPenalty(0, 0, false, new Position(this), false));
             }
         
             lineLayouts = (LineLayoutPossibilities)lineLayoutsList.get(p);
@@ -1187,11 +1191,13 @@ public class LineLayoutManager extends InlineStackingLayoutManager
                         i < lineLayouts.getChosenLineCount();
                         i++) {
                     if (!((BlockLevelLayoutManager) parentLM).mustKeepTogether()
-                        && i >= fobj.getOrphans()
-                        && i <= lineLayouts.getChosenLineCount() - fobj.getWidows()
-                        && returnList.size() > 0) {
+                            && i >= fobj.getOrphans()
+                            && i <= lineLayouts.getChosenLineCount() - fobj.getWidows()
+                            && returnList.size() > 0) {
                         // null penalty allowing a page break between lines
-                        returnList.add(new KnuthPenalty(0, 0, false, returnPosition, false));
+                        returnList.add(new BreakElement(
+                                returnPosition, 0, context));
+                        //returnList.add(new KnuthPenalty(0, 0, false, returnPosition, false));
                     }
                     int endIndex = ((LineBreakPosition) lineLayouts.getChosenPosition(i)).getLeafPos();
                     // create a list of the FootnoteBodyLM handling footnotes 
index db157f4cfbfabe3cc3470914a39eef171c9b140a..d1f88c717679636dfab80c23381a2586a81c03d2 100644 (file)
@@ -21,11 +21,13 @@ package org.apache.fop.layoutmgr.list;
 import org.apache.fop.fo.flow.ListBlock;
 import org.apache.fop.layoutmgr.BlockLevelLayoutManager;
 import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
+import org.apache.fop.layoutmgr.ConditionalElementListener;
 import org.apache.fop.layoutmgr.LayoutManager;
 import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.Position;
 import org.apache.fop.layoutmgr.NonLeafPosition;
+import org.apache.fop.layoutmgr.RelSide;
 import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
@@ -41,11 +43,17 @@ import java.util.List;
  * A list block contains list items which are stacked within
  * the list block area..
  */
-public class ListBlockLayoutManager extends BlockStackingLayoutManager {
+public class ListBlockLayoutManager extends BlockStackingLayoutManager 
+                implements ConditionalElementListener {
 
     private Block curBlockArea;
 
-    //TODO space-before|after: handle space-resolution rules
+    private boolean discardBorderBefore;
+    private boolean discardBorderAfter;
+    private boolean discardPaddingBefore;
+    private boolean discardPaddingAfter;
+    private MinOptMax effSpaceBefore;
+    private MinOptMax effSpaceAfter;
 
     private static class StackingIter extends PositionIterator {
         StackingIter(Iterator parentIter) {
@@ -86,11 +94,23 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager {
         return (ListBlock)fobj;
     }
 
+    /** @see org.apache.fop.layoutmgr.LayoutManager#initialize() */
     public void initialize() {
-        foSpaceBefore = new SpaceVal(getListBlockFO().getCommonMarginBlock().spaceBefore, this).getSpace();
-        foSpaceAfter = new SpaceVal(getListBlockFO().getCommonMarginBlock().spaceAfter, this).getSpace();
+        foSpaceBefore = new SpaceVal(
+                getListBlockFO().getCommonMarginBlock().spaceBefore, this).getSpace();
+        foSpaceAfter = new SpaceVal(
+                getListBlockFO().getCommonMarginBlock().spaceAfter, this).getSpace();
     }
 
+    private void resetSpaces() {
+        this.discardBorderBefore = false;        
+        this.discardBorderAfter = false;        
+        this.discardPaddingBefore = false;        
+        this.discardPaddingAfter = false;
+        this.effSpaceBefore = foSpaceBefore;
+        this.effSpaceAfter = foSpaceAfter;
+    }
+    
     private int getIPIndents() {
         int iIndents = 0;
         iIndents += getListBlockFO().getCommonMarginBlock().startIndent.getValue(this);
@@ -98,6 +118,12 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager {
         return iIndents;
     }
     
+    /** @see org.apache.fop.layoutmgr.BlockStackingLayoutManager */
+    public LinkedList getNextKnuthElements(LayoutContext context, int alignment) {
+        resetSpaces(); 
+        return super.getNextKnuthElements(context, alignment);
+    }
+   
     /** @see org.apache.fop.layoutmgr.LayoutManager#getChangedKnuthElements(java.util.List, int) */
     public LinkedList getChangedKnuthElements(List oldList, int alignment) {
         //log.debug("LBLM.getChangedKnuthElements>");
@@ -121,11 +147,6 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager {
             addBlockSpacing(0.0, new MinOptMax(layoutContext.getSpaceBefore()));
         }
 
-        // if adjusted space before
-        double adjust = layoutContext.getSpaceAdjust();
-        addBlockSpacing(adjust, foSpaceBefore);
-        foSpaceBefore = null;
-        
         getPSLM().addIDToPage(getListBlockFO().getId());
 
         // the list block contains areas stacked from each list item
@@ -184,13 +205,13 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager {
         TraitSetter.addBackground(curBlockArea, 
                 getListBlockFO().getCommonBorderPaddingBackground(),
                 this);
+        TraitSetter.addSpaceBeforeAfter(curBlockArea, layoutContext.getSpaceAdjust(), 
+                effSpaceBefore, effSpaceAfter);
 
         flush();
 
-        // if adjusted space after
-        addBlockSpacing(adjust, foSpaceAfter);
-        
         curBlockArea = null;
+        resetSpaces();
     }
 
     /**
@@ -217,7 +238,11 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager {
             // set traits
             TraitSetter.setProducerID(curBlockArea, getListBlockFO().getId());
             TraitSetter.addBorders(curBlockArea, 
-            getListBlockFO().getCommonBorderPaddingBackground(), this);
+                    getListBlockFO().getCommonBorderPaddingBackground(), 
+                    discardBorderBefore, discardBorderAfter, false, false, this);
+            TraitSetter.addPadding(curBlockArea, 
+                    getListBlockFO().getCommonBorderPaddingBackground(), 
+                    discardPaddingBefore, discardPaddingAfter, false, false, this);
             TraitSetter.addMargins(curBlockArea,
                     getListBlockFO().getCommonBorderPaddingBackground(), 
                     getListBlockFO().getCommonMarginBlock(),
@@ -278,5 +303,50 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager {
                 || !getListBlockFO().getKeepWithNext().getWithinColumn().isAuto();
     }
 
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifySpace(RelSide side, MinOptMax effectiveLength) {
+        if (RelSide.BEFORE == side) {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceBefore + "-> " + effectiveLength);
+            }
+            this.effSpaceBefore = effectiveLength;
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceAfter + "-> " + effectiveLength);
+            }
+            this.effSpaceAfter = effectiveLength;
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyBorder(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardBorderBefore = true;
+            } else {
+                this.discardBorderAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Border " + side + " -> " + effectiveLength);
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyPadding(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardPaddingBefore = true;
+            } else {
+                this.discardPaddingAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Padding " + side + " -> " + effectiveLength);
+        }
+    }
+
 }
 
index 3ebc4bda718f637c805847e2570c2f1144c2ccf8..c8cedb0bbe1c6f0e596a1f660ffb03e7b26d30bd 100644 (file)
@@ -23,11 +23,17 @@ import org.apache.fop.fo.flow.ListItemBody;
 import org.apache.fop.fo.flow.ListItemLabel;
 import org.apache.fop.layoutmgr.BlockLevelLayoutManager;
 import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
+import org.apache.fop.layoutmgr.BreakElement;
+import org.apache.fop.layoutmgr.ConditionalElementListener;
+import org.apache.fop.layoutmgr.ElementListObserver;
+import org.apache.fop.layoutmgr.ElementListUtils;
 import org.apache.fop.layoutmgr.LayoutManager;
 import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.Position;
 import org.apache.fop.layoutmgr.NonLeafPosition;
+import org.apache.fop.layoutmgr.RelSide;
+import org.apache.fop.layoutmgr.SpaceResolver;
 import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.layoutmgr.KnuthElement;
 import org.apache.fop.layoutmgr.KnuthBox;
@@ -35,6 +41,7 @@ import org.apache.fop.layoutmgr.KnuthPenalty;
 import org.apache.fop.layoutmgr.KnuthPossPosIter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
+import org.apache.fop.traits.MinOptMax;
 import org.apache.fop.traits.SpaceVal;
 
 import java.util.ArrayList;
@@ -46,7 +53,8 @@ import java.util.ListIterator;
  * LayoutManager for a list-item FO.
  * The list item contains a list item label and a list item body.
  */
-public class ListItemLayoutManager extends BlockStackingLayoutManager {
+public class ListItemLayoutManager extends BlockStackingLayoutManager 
+                    implements ConditionalElementListener {
     private ListItemContentLayoutManager label;
     private ListItemContentLayoutManager body;
 
@@ -57,20 +65,16 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
 
     private int listItemHeight;
     
-    //TODO space-before|after: handle space-resolution rules
+    private boolean discardBorderBefore;
+    private boolean discardBorderAfter;
+    private boolean discardPaddingBefore;
+    private boolean discardPaddingAfter;
+    private MinOptMax effSpaceBefore;
+    private MinOptMax effSpaceAfter;
     
     private boolean keepWithNextPendingOnLabel;
     private boolean keepWithNextPendingOnBody;
-    
-    /*
-    private class ItemPosition extends LeafPosition {
-        protected List cellBreaks;
-        protected ItemPosition(LayoutManager lm, int pos, List l) {
-            super(lm, pos);
-            cellBreaks = l;
-        }
-    }*/
-
+  
     private class ListItemPosition extends Position {
         private int iLabelFirstIndex;
         private int iLabelLastIndex;
@@ -149,11 +153,23 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
         body.setParent(this);
     }
 
+    /** @see org.apache.fop.layoutmgr.LayoutManager#initialize() */
     public void initialize() {
-        foSpaceBefore = new SpaceVal(getListItemFO().getCommonMarginBlock().spaceBefore, this).getSpace();
-        foSpaceAfter = new SpaceVal(getListItemFO().getCommonMarginBlock().spaceAfter, this).getSpace();
+        foSpaceBefore = new SpaceVal(
+                getListItemFO().getCommonMarginBlock().spaceBefore, this).getSpace();
+        foSpaceAfter = new SpaceVal(
+                getListItemFO().getCommonMarginBlock().spaceAfter, this).getSpace();
     }
 
+    private void resetSpaces() {
+        this.discardBorderBefore = false;        
+        this.discardBorderAfter = false;        
+        this.discardPaddingBefore = false;        
+        this.discardPaddingAfter = false;
+        this.effSpaceBefore = foSpaceBefore;
+        this.effSpaceAfter = foSpaceAfter;
+    }
+    
     private int getIPIndents() {
         int iIndents = 0;
         iIndents += getListItemFO().getCommonMarginBlock().startIndent.getValue(this);
@@ -168,16 +184,22 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
         
         LinkedList returnList = new LinkedList();
         
-        if (!bSpaceBeforeServed) {
-            addKnuthElementsForSpaceBefore(returnList, alignment);
-            bSpaceBeforeServed = true;
-        }
+        addKnuthElementsForSpaceBefore(returnList, alignment);
         
+        //Spaces, border and padding to be repeated at each break
+        addPendingMarks(context);
+
         // label
         childLC = new LayoutContext(0);
         childLC.setRefIPD(context.getRefIPD());
         label.initialize();
         labelList = label.getNextKnuthElements(childLC, alignment);
+        
+        //Space resolution as if the contents were placed in a new reference area
+        //(see 6.8.3, XSL 1.0, section on Constraints, last paragraph)
+        SpaceResolver.resolveElementList(labelList);
+        ElementListObserver.observe(labelList, "list-item-label", label.getPartFO().getId());
+        
         if (childLC.isKeepWithPreviousPending()) {
             context.setFlags(LayoutContext.KEEP_WITH_PREVIOUS_PENDING);
         }
@@ -188,13 +210,19 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
         childLC.setRefIPD(context.getRefIPD());
         body.initialize();
         bodyList = body.getNextKnuthElements(childLC, alignment);
+
+        //Space resolution as if the contents were placed in a new reference area
+        //(see 6.8.3, XSL 1.0, section on Constraints, last paragraph)
+        SpaceResolver.resolveElementList(bodyList);
+        ElementListObserver.observe(bodyList, "list-item-body", body.getPartFO().getId());
+        
         if (childLC.isKeepWithPreviousPending()) {
             context.setFlags(LayoutContext.KEEP_WITH_PREVIOUS_PENDING);
         }
         this.keepWithNextPendingOnBody = childLC.isKeepWithNextPending();
 
         // create a combined list
-        LinkedList returnedList = getCombinedKnuthElementsForListItem(labelList, bodyList);
+        LinkedList returnedList = getCombinedKnuthElementsForListItem(labelList, bodyList, context);
 
         // "wrap" the Position inside each element
         wrapPositionElements(returnedList, returnList, true);
@@ -209,16 +237,18 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
         }
 
         setFinished(true);
+        resetSpaces();
         return returnList;
     }
 
     private LinkedList getCombinedKnuthElementsForListItem(LinkedList labelElements,
-                                                           LinkedList bodyElements) {
+                                                           LinkedList bodyElements,
+                                                           LayoutContext context) {
         //Copy elements to array lists to improve element access performance
         List[] elementLists = {new ArrayList(labelElements),
                                new ArrayList(bodyElements)};
-        int[] fullHeights = {calcItemHeightFromContents(elementLists[0]),
-                            calcItemHeightFromContents(elementLists[1])};
+        int[] fullHeights = {ElementListUtils.calcContentLength(elementLists[0]),
+                ElementListUtils.calcContentLength(elementLists[1])};
         int[] partialHeights = {0, 0};
         int[] start = {-1, -1};
         int[] end = {-1, -1};
@@ -259,39 +289,14 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
                 if (keepWithNextActive || mustKeepTogether()) {
                     p = KnuthPenalty.INFINITE;
                 }
-                returnList.add(new KnuthPenalty(penaltyHeight, p, false, stepPosition, false));
+                //returnList.add(new KnuthPenalty(penaltyHeight, p, false, stepPosition, false));
+                returnList.add(new BreakElement(stepPosition, penaltyHeight, p, 0, context));
             }
         }
 
         return returnList;
     }
 
-    private int calcItemHeightFromContents(List elements, int start, int end) {
-        ListIterator iter = elements.listIterator(start);
-        int count = end - start + 1;
-        int len = 0;
-        while (iter.hasNext()) {
-            KnuthElement el = (KnuthElement)iter.next();
-            if (el.isBox()) {
-                len += el.getW();
-            } else if (el.isGlue()) {
-                len += el.getW();
-            } else {
-                log.debug("Ignoring penalty: " + el);
-                //ignore penalties
-            }
-            count--;
-            if (count == 0) {
-                break;
-            }
-        }
-        return len;
-    }
-    
-    private int calcItemHeightFromContents(List elements) {
-        return calcItemHeightFromContents(elements, 0, elements.size() - 1);
-    }
-
     private int getNextStep(List[] elementLists, int[] start, int[] end, int[] partialHeights) {
         // backup of partial heights
         int[] backupHeights = {partialHeights[0], partialHeights[1]};
@@ -422,11 +427,6 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
                          LayoutContext layoutContext) {
         getParentArea(null);
 
-        // if adjusted space before
-        double adjust = layoutContext.getSpaceAdjust();
-        addBlockSpacing(adjust, foSpaceBefore);
-        foSpaceBefore = null;
-
         getPSLM().addIDToPage(getListItemFO().getId());
 
         LayoutContext lc = new LayoutContext(0);
@@ -461,6 +461,31 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
         int bodyFirstIndex = ((ListItemPosition) positionList.getFirst()).getBodyFirstIndex();
         int bodyLastIndex = ((ListItemPosition) positionList.getLast()).getBodyLastIndex();
 
+        int lastBreak;
+        //Determine last break if any
+        lastBreak = labelFirstIndex - 1;
+        while (lastBreak >= 0) {
+            KnuthElement el = (KnuthElement)labelList.get(lastBreak);
+            if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
+                break;
+            }
+            lastBreak--;
+        }
+        SpaceResolver.performConditionalsNotification(labelList, 
+                labelFirstIndex, labelLastIndex, lastBreak);
+
+        //Determine last break if any
+        lastBreak = bodyFirstIndex - 1;
+        while (lastBreak >= 0) {
+            KnuthElement el = (KnuthElement)bodyList.get(lastBreak);
+            if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
+                break;
+            }
+            lastBreak--;
+        }
+        SpaceResolver.performConditionalsNotification(bodyList, 
+                bodyFirstIndex, bodyLastIndex, lastBreak);
+        
         // add label areas
         if (labelFirstIndex <= labelLastIndex) {
             KnuthPossPosIter labelIter = new KnuthPossPosIter(labelList, 
@@ -508,13 +533,13 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
         TraitSetter.addBackground(curBlockArea, 
                 getListItemFO().getCommonBorderPaddingBackground(),
                 this);
+        TraitSetter.addSpaceBeforeAfter(curBlockArea, layoutContext.getSpaceAdjust(), 
+                effSpaceBefore, effSpaceAfter);
 
         flush();
 
-        // if adjusted space after
-        addBlockSpacing(adjust, foSpaceAfter);
-        
         curBlockArea = null;
+        resetSpaces();
     }
 
     /**
@@ -550,7 +575,11 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
             // set traits
             TraitSetter.setProducerID(curBlockArea, getListItemFO().getId());
             TraitSetter.addBorders(curBlockArea, 
-                    getListItemFO().getCommonBorderPaddingBackground(), this);
+                    getListItemFO().getCommonBorderPaddingBackground(), 
+                    discardBorderBefore, discardBorderAfter, false, false, this);
+            TraitSetter.addPadding(curBlockArea, 
+                    getListItemFO().getCommonBorderPaddingBackground(), 
+                    discardPaddingBefore, discardPaddingAfter, false, false, this);
             TraitSetter.addMargins(curBlockArea,
                     getListItemFO().getCommonBorderPaddingBackground(), 
                     getListItemFO().getCommonMarginBlock(), this);
@@ -610,5 +639,51 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager {
                 || !getListItemFO().getKeepWithNext().getWithinColumn().isAuto();
     }
 
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifySpace(RelSide side, MinOptMax effectiveLength) {
+        if (RelSide.BEFORE == side) {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceBefore + "-> " + effectiveLength);
+            }
+            this.effSpaceBefore = effectiveLength;
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceAfter + "-> " + effectiveLength);
+            }
+            this.effSpaceAfter = effectiveLength;
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyBorder(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardBorderBefore = true;
+            } else {
+                this.discardBorderAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Border " + side + " -> " + effectiveLength);
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyPadding(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardPaddingBefore = true;
+            } else {
+                this.discardPaddingAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Padding " + side + " -> " + effectiveLength);
+        }
+    }
+
+    
 }
 
index c4175f95b5df0d3df79d3ae9ef8f812d708c7dbe..4070885220a8a6d771a6a94b7f0ad68f3d61d87e 100644 (file)
@@ -27,12 +27,14 @@ import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 import org.apache.fop.layoutmgr.AreaAdditionUtil;
 import org.apache.fop.layoutmgr.BlockLevelLayoutManager;
 import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
+import org.apache.fop.layoutmgr.BreakElement;
 import org.apache.fop.layoutmgr.KnuthElement;
 import org.apache.fop.layoutmgr.KnuthGlue;
-import org.apache.fop.layoutmgr.KnuthPenalty;
 import org.apache.fop.layoutmgr.LayoutContext;
+import org.apache.fop.layoutmgr.ListElement;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.SpaceResolver;
 import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
@@ -43,9 +45,9 @@ import org.apache.fop.traits.MinOptMax;
  * LayoutManager for a table-cell FO.
  * A cell contains blocks. These blocks fill the cell.
  */
-public class TableCellLayoutManager extends BlockStackingLayoutManager implements BlockLevelLayoutManager {
+public class TableCellLayoutManager extends BlockStackingLayoutManager 
+            implements BlockLevelLayoutManager {
     
-    private TableCell fobj;
     private PrimaryGridUnit gridUnit;
     
     private Block curBlockArea;
@@ -75,22 +77,27 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
 
     /** @return the table-cell FO */
     public TableCell getTableCell() {
-        return this.fobj;
+        return (TableCell)this.fobj;
     }
     
     private boolean isSeparateBorderModel() {
-        return fobj.isSeparateBorderModel();
+        return getTableCell().isSeparateBorderModel();
     }
     
+    /** @see org.apache.fop.layoutmgr.LayoutManager#initialize() */
     public void initialize() {
         borderAndPaddingBPD = 0;
-        borderAndPaddingBPD += fobj.getCommonBorderPaddingBackground().getBorderBeforeWidth(false);
-        borderAndPaddingBPD += fobj.getCommonBorderPaddingBackground().getBorderAfterWidth(false);
+        borderAndPaddingBPD += getTableCell()
+            .getCommonBorderPaddingBackground().getBorderBeforeWidth(false);
+        borderAndPaddingBPD += getTableCell()
+            .getCommonBorderPaddingBackground().getBorderAfterWidth(false);
         if (!isSeparateBorderModel()) {
             borderAndPaddingBPD /= 2;
         }
-        borderAndPaddingBPD += fobj.getCommonBorderPaddingBackground().getPaddingBefore(false, this);
-        borderAndPaddingBPD += fobj.getCommonBorderPaddingBackground().getPaddingAfter(false, this);
+        borderAndPaddingBPD += getTableCell().getCommonBorderPaddingBackground()
+                .getPaddingBefore(false, this);
+        borderAndPaddingBPD += getTableCell().getCommonBorderPaddingBackground()
+                .getPaddingAfter(false, this);
     }
     
     /**
@@ -115,8 +122,8 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
         if (!isSeparateBorderModel()) {
             iIndents /= 2;
         }
-        iIndents += fobj.getCommonBorderPaddingBackground().getPaddingStart(false, this);
-        iIndents += fobj.getCommonBorderPaddingBackground().getPaddingEnd(false, this);
+        iIndents += getTableCell().getCommonBorderPaddingBackground().getPaddingStart(false, this);
+        iIndents += getTableCell().getCommonBorderPaddingBackground().getPaddingEnd(false, this);
         return iIndents;
     }
     
@@ -130,7 +137,7 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
         cellIPD = referenceIPD;
         cellIPD -= getIPIndents();
         if (isSeparateBorderModel()) {
-            int borderSep = fobj.getBorderSeparation().getLengthPair()
+            int borderSep = getTableCell().getBorderSeparation().getLengthPair()
                     .getIPD().getLength().getValue(this);
             cellIPD -= borderSep;
         }
@@ -159,8 +166,7 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
             }
             
             if (returnedList.size() == 1
-                    && ((KnuthElement) returnedList.getFirst()).isPenalty()
-                    && ((KnuthPenalty) returnedList.getFirst()).getP() == -KnuthElement.INFINITE) {
+                    && ((ListElement)returnedList.getFirst()).isForcedBreak()) {
                 // a descendant of this block has break-before
                 if (returnList.size() == 0) {
                     // the first child (or its first child ...) has
@@ -176,6 +182,9 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
                 returnedList = new LinkedList();
                 wrapPositionElements(contentList, returnList);
 
+                //Space resolution
+                SpaceResolver.resolveElementList(returnList);
+                
                 return returnList;
             } else {
                 if (prevLM != null) {
@@ -189,13 +198,17 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
                         childLC.setFlags(LayoutContext.KEEP_WITH_PREVIOUS_PENDING, false);
                         // add an infinite penalty to forbid a break between
                         // blocks
-                        contentList.add(new KnuthPenalty(0,
-                                KnuthElement.INFINITE, false,
-                                new Position(this), false));
+                        contentList.add(new BreakElement(
+                                new Position(this), KnuthElement.INFINITE, context));
+                        //contentList.add(new KnuthPenalty(0,
+                        //        KnuthElement.INFINITE, false,
+                        //        new Position(this), false));
                     } else if (!((KnuthElement) contentList.getLast()).isGlue()) {
                         // add a null penalty to allow a break between blocks
-                        contentList.add(new KnuthPenalty(0, 0, false,
-                                new Position(this), false));
+                        contentList.add(new BreakElement(
+                                new Position(this), 0, context));
+                        //contentList.add(new KnuthPenalty(0, 0, false,
+                        //        new Position(this), false));
                     } else {
                         // the last element in contentList is a glue;
                         // it is a feasible breakpoint, there is no need to add
@@ -207,9 +220,7 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
                     //Avoid NoSuchElementException below (happens with empty blocks)
                     continue;
                 }
-                if (((KnuthElement) returnedList.getLast()).isPenalty()
-                        && ((KnuthPenalty) returnedList.getLast()).getP() 
-                                == -KnuthElement.INFINITE) {
+                if (((ListElement)returnedList.getLast()).isForcedBreak()) {
                     // a descendant of this block has break-after
                     if (curLM.isFinished()) {
                         // there is no other content in this block;
@@ -220,6 +231,9 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
                     returnedList = new LinkedList();
                     wrapPositionElements(contentList, returnList);
 
+                    //Space resolution
+                    SpaceResolver.resolveElementList(returnList);
+                    
                     return returnList;
                 }
             }
@@ -234,6 +248,9 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
         returnedList = new LinkedList();
         wrapPositionElements(contentList, returnList);
         
+        //Space resolution
+        SpaceResolver.resolveElementList(returnList);
+        
         setFinished(true);
         return returnList;
     }
@@ -314,11 +331,12 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
                          LayoutContext layoutContext) {
         getParentArea(null);
 
-        getPSLM().addIDToPage(fobj.getId());
+        getPSLM().addIDToPage(getTableCell().getId());
 
         if (isSeparateBorderModel()) {
-            if (!emptyCell || fobj.showEmptyCells()) {
-                TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground(), this);
+            if (!emptyCell || getTableCell().showEmptyCells()) {
+                TraitSetter.addBorders(curBlockArea, 
+                        getTableCell().getCommonBorderPaddingBackground(), this);
             }
         } else {
             boolean[] outer = new boolean[] {
@@ -384,11 +402,11 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
         //Handle display-align
         int contentBPD = getContentHeight(rowHeight, gridUnit);
         if (usedBPD < contentBPD) {
-            if (fobj.getDisplayAlign() == EN_CENTER) {
+            if (getTableCell().getDisplayAlign() == EN_CENTER) {
                 Block space = new Block();
                 space.setBPD((contentBPD - usedBPD) / 2);
                 curBlockArea.addBlock(space);
-            } else if (fobj.getDisplayAlign() == EN_AFTER) {
+            } else if (getTableCell().getDisplayAlign() == EN_AFTER) {
                 Block space = new Block();
                 space.setBPD((contentBPD - usedBPD));
                 curBlockArea.addBlock(space);
@@ -401,15 +419,15 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
 
         // Add background after we know the BPD
         if (isSeparateBorderModel()) {
-            if (!emptyCell || fobj.showEmptyCells()) {
+            if (!emptyCell || getTableCell().showEmptyCells()) {
                 TraitSetter.addBackground(curBlockArea,
-                                          fobj.getCommonBorderPaddingBackground(),
-                                          this);
+                        getTableCell().getCommonBorderPaddingBackground(),
+                        this);
             }
         } else {
             TraitSetter.addBackground(curBlockArea,
-                                      fobj.getCommonBorderPaddingBackground(),
-                                      this);
+                    getTableCell().getCommonBorderPaddingBackground(),
+                    this);
         }
         
         flush();
@@ -434,18 +452,19 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager implement
         if (curBlockArea == null) {
             curBlockArea = new Block();
             curBlockArea.addTrait(Trait.IS_REFERENCE_AREA, Boolean.TRUE);
-            TraitSetter.setProducerID(curBlockArea, fobj.getId());
+            TraitSetter.setProducerID(curBlockArea, getTableCell().getId());
             curBlockArea.setPositioning(Block.ABSOLUTE);
             int indent = 0;
             indent += startBorderWidth;
             if (!isSeparateBorderModel()) {
                 indent /= 2;
             }
-            indent += fobj.getCommonBorderPaddingBackground().getPaddingStart(false, this);
+            indent += getTableCell()
+                    .getCommonBorderPaddingBackground().getPaddingStart(false, this);
             // set position
             int halfBorderSep = 0;
             if (isSeparateBorderModel()) {
-                halfBorderSep = fobj.getBorderSeparation().getLengthPair()
+                halfBorderSep = getTableCell().getBorderSeparation().getLengthPair()
                         .getIPD().getLength().getValue(this) / 2;
             }
             int borderAdjust = 0;
index fd4a81b58529d9dd28ff067413b982c42b86e067..6c8b9e05bc088a71e24bc2eaf4ce3ae7a2b07a4f 100644 (file)
@@ -36,6 +36,7 @@ import org.apache.fop.fo.flow.TableBody;
 import org.apache.fop.fo.flow.TableRow;
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
 import org.apache.fop.fo.properties.LengthRangeProperty;
+import org.apache.fop.layoutmgr.BreakElement;
 import org.apache.fop.layoutmgr.ElementListObserver;
 import org.apache.fop.layoutmgr.ElementListUtils;
 import org.apache.fop.layoutmgr.KnuthBox;
@@ -44,10 +45,12 @@ import org.apache.fop.layoutmgr.KnuthPenalty;
 import org.apache.fop.layoutmgr.KnuthPossPosIter;
 import org.apache.fop.layoutmgr.LayoutContext;
 import org.apache.fop.layoutmgr.LayoutManager;
+import org.apache.fop.layoutmgr.ListElement;
 import org.apache.fop.layoutmgr.MinOptMaxUtil;
 import org.apache.fop.layoutmgr.Position;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.TraitSetter;
+import org.apache.fop.layoutmgr.SpaceResolver.SpaceHandlingBreakPosition;
 import org.apache.fop.traits.MinOptMax;
 
 /**
@@ -199,16 +202,22 @@ public class TableContentLayoutManager implements PercentBaseContext {
             if (rowFO != null && rowFO.getBreakBefore() != Constants.EN_AUTO) {
                 log.info("break-before found");
                 if (returnList.size() > 0) {
-                    KnuthElement last = (KnuthElement)returnList.getLast();
+                    ListElement last = (ListElement)returnList.getLast();
                     if (last.isPenalty()) {
                         KnuthPenalty pen = (KnuthPenalty)last;
                         pen.setP(-KnuthPenalty.INFINITE);
                         pen.setBreakClass(rowFO.getBreakBefore());
+                    } else if (last instanceof BreakElement) {
+                        BreakElement breakPoss = (BreakElement)last;
+                        breakPoss.setPenaltyValue(-KnuthPenalty.INFINITE);
+                        breakPoss.setBreakClass(rowFO.getBreakBefore());
                     }
                 } else {
                     if (!firstBreakBeforeServed) {
-                        returnList.add(new KnuthPenalty(0, -KnuthPenalty.INFINITE, 
-                                false, rowFO.getBreakBefore(), new Position(getTableLM()), true));
+                        //returnList.add(new KnuthPenalty(0, -KnuthPenalty.INFINITE, 
+                        //        false, rowFO.getBreakBefore(), new Position(getTableLM()), true));
+                        returnList.add(new BreakElement(new Position(getTableLM()),
+                                0, -KnuthPenalty.INFINITE, rowFO.getBreakBefore(), context));
                         iter.backToPreviousRow();
                         firstBreakBeforeServed = true;
                         break;
@@ -234,12 +243,12 @@ public class TableContentLayoutManager implements PercentBaseContext {
                 log.debug("child LM (row group) signals pending keep-with-previous");
                 if (returnList.size() > 0) {
                     //Modify last penalty
-                    KnuthElement last = (KnuthElement)returnList.getLast();
+                    ListElement last = (ListElement)returnList.getLast();
                     if (last.isPenalty()) {
-                        KnuthPenalty pen = (KnuthPenalty)last;
+                        BreakElement breakPoss = (BreakElement)last;
                         //Only honor keep if there's no forced break
-                        if (!pen.isForcedBreak()) {
-                            pen.setP(KnuthPenalty.INFINITE);
+                        if (!breakPoss.isForcedBreak()) {
+                            breakPoss.setPenaltyValue(KnuthPenalty.INFINITE);
                         }
                     }
                 }
@@ -250,11 +259,15 @@ public class TableContentLayoutManager implements PercentBaseContext {
             if (rowFO != null && rowFO.getBreakAfter() != Constants.EN_AUTO) {
                 log.info("break-after found");
                 if (returnList.size() > 0) {
-                    KnuthElement last = (KnuthElement)returnList.getLast();
-                    if (last.isPenalty()) {
+                    ListElement last = (ListElement)returnList.getLast();
+                    if (last instanceof KnuthPenalty) {
                         KnuthPenalty pen = (KnuthPenalty)last;
                         pen.setP(-KnuthPenalty.INFINITE);
                         pen.setBreakClass(rowFO.getBreakAfter());
+                    } else if (last instanceof BreakElement) {
+                        BreakElement breakPoss = (BreakElement)last;
+                        breakPoss.setPenaltyValue(-KnuthPenalty.INFINITE);
+                        breakPoss.setBreakClass(rowFO.getBreakAfter());
                     }
                 }
             }
@@ -262,10 +275,9 @@ public class TableContentLayoutManager implements PercentBaseContext {
         
         if (returnList.size() > 0) {
             //Remove last penalty
-            KnuthElement last = (KnuthElement)returnList.getLast();
-            if (last.isPenalty()) {
-                KnuthPenalty pen = (KnuthPenalty)last;
-                if (!pen.isForcedBreak()) {
+            ListElement last = (ListElement)returnList.getLast();
+            if (last.isPenalty() || last instanceof BreakElement) {
+                if (!last.isForcedBreak()) {
                     //Only remove if we don't signal a forced break
                     returnList.removeLast();
                 }
@@ -461,9 +473,7 @@ public class TableContentLayoutManager implements PercentBaseContext {
                         ElementListObserver.observe(elems, "table-cell", primary.getCell().getId());
 
                         if ((elems.size() > 0) 
-                                && ((KnuthElement)elems.getLast()).isPenalty()
-                                && ((KnuthPenalty)elems.getLast()).getP() 
-                                        == -KnuthElement.INFINITE) {
+                                && ((KnuthElement)elems.getLast()).isForcedBreak()) {
                             // a descendant of this block has break-after
                             log.warn("Descendant of table-cell signals break: " 
                                     + primary.getCellLM().isFinished());
@@ -587,12 +597,24 @@ public class TableContentLayoutManager implements PercentBaseContext {
         List footerElements = null;
         Position firstPos = null;
         Position lastPos = null;
+        Position lastCheckPos = null;
         while (parentIter.hasNext()) {
             Position pos = (Position)parentIter.next();
+            if (pos instanceof SpaceHandlingBreakPosition) {
+                //This position has only been needed before addAreas was called, now we need the
+                //original one created by the layout manager.
+                pos = ((SpaceHandlingBreakPosition)pos).getOriginalBreakPosition();
+            }
+            if (pos == null) {
+                continue;
+            }
             if (firstPos == null) {
                 firstPos = pos;
             }
             lastPos = pos;
+            if (pos.getIndex() >= 0) {
+                lastCheckPos = pos;
+            }
             if (pos instanceof TableHeaderFooterPosition) {
                 TableHeaderFooterPosition thfpos = (TableHeaderFooterPosition)pos;
                 //these positions need to be unpacked
@@ -627,7 +649,7 @@ public class TableContentLayoutManager implements PercentBaseContext {
         Map markers = getTableLM().getTable().getMarkers();
         if (markers != null) {
             getTableLM().getCurrentPV().addMarkers(markers, 
-                    true, getTableLM().isFirst(firstPos), getTableLM().isLast(lastPos));
+                    true, getTableLM().isFirst(firstPos), getTableLM().isLast(lastCheckPos));
         }
         
         if (headerElements != null) {
@@ -655,7 +677,7 @@ public class TableContentLayoutManager implements PercentBaseContext {
 
         if (markers != null) {
             getTableLM().getCurrentPV().addMarkers(markers, 
-                    false, getTableLM().isFirst(firstPos), getTableLM().isLast(lastPos));
+                    false, getTableLM().isFirst(firstPos), getTableLM().isLast(lastCheckPos));
         }
     }
     
index cda906c9eb73c44fe60dcf79efcdec5094cf95d0..f805fe9c75e3c80b8569f9ff1cae9e1328aa2944 100644 (file)
@@ -24,12 +24,14 @@ import org.apache.fop.fo.flow.TableColumn;
 import org.apache.fop.fo.properties.TableColLength;
 import org.apache.fop.layoutmgr.BlockLevelLayoutManager;
 import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
+import org.apache.fop.layoutmgr.ConditionalElementListener;
 import org.apache.fop.layoutmgr.KnuthElement;
 import org.apache.fop.layoutmgr.KnuthGlue;
-import org.apache.fop.layoutmgr.KnuthPenalty;
 import org.apache.fop.layoutmgr.LayoutContext;
+import org.apache.fop.layoutmgr.ListElement;
 import org.apache.fop.layoutmgr.PositionIterator;
 import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.RelSide;
 import org.apache.fop.layoutmgr.TraitSetter;
 import org.apache.fop.area.Area;
 import org.apache.fop.area.Block;
@@ -50,8 +52,7 @@ import org.apache.fop.fo.FObj;
  * the render background.
  */
 public class TableLayoutManager extends BlockStackingLayoutManager 
-                implements BlockLevelLayoutManager {
-    private Table fobj;
+                implements ConditionalElementListener {
     
     private TableContentLayoutManager contentLM; 
     private ColumnSetup columns = null;
@@ -63,9 +64,12 @@ public class TableLayoutManager extends BlockStackingLayoutManager
     private double tableUnits;
     private boolean autoLayout = true;
 
-    //TODO space-before|after: handle space-resolution rules
-    private MinOptMax spaceBefore;
-    private MinOptMax spaceAfter;
+    private boolean discardBorderBefore;
+    private boolean discardBorderAfter;
+    private boolean discardPaddingBefore;
+    private boolean discardPaddingAfter;
+    private MinOptMax effSpaceBefore;
+    private MinOptMax effSpaceAfter;
     
     /**
      * Create a new table layout manager.
@@ -73,13 +77,12 @@ public class TableLayoutManager extends BlockStackingLayoutManager
      */
     public TableLayoutManager(Table node) {
         super(node);
-        fobj = node;
         this.columns = new ColumnSetup(node);
     }
 
     /** @return the table FO */
     public Table getTable() {
-        return this.fobj;
+        return (Table)this.fobj;
     }
     
     /**
@@ -91,19 +94,31 @@ public class TableLayoutManager extends BlockStackingLayoutManager
     
     /** @see org.apache.fop.layoutmgr.LayoutManager#initialize() */
     public void initialize() {
-        spaceBefore = new SpaceVal(fobj.getCommonMarginBlock().spaceBefore, this).getSpace();
-        spaceAfter = new SpaceVal(fobj.getCommonMarginBlock().spaceAfter, this).getSpace();
+        foSpaceBefore = new SpaceVal(
+                getTable().getCommonMarginBlock().spaceBefore, this).getSpace();
+        foSpaceAfter = new SpaceVal(
+                getTable().getCommonMarginBlock().spaceAfter, this).getSpace();
         
-        if (!fobj.isAutoLayout() 
-                && fobj.getInlineProgressionDimension().getOptimum(this).getEnum() != EN_AUTO) {
+        if (!getTable().isAutoLayout() 
+                && getTable().getInlineProgressionDimension().getOptimum(this).getEnum() 
+                    != EN_AUTO) {
             autoLayout = false;
         }
     }
 
+    private void resetSpaces() {
+        this.discardBorderBefore = false;        
+        this.discardBorderAfter = false;        
+        this.discardPaddingBefore = false;        
+        this.discardPaddingAfter = false;
+        this.effSpaceBefore = foSpaceBefore;
+        this.effSpaceAfter = foSpaceAfter;
+    }
+    
     private int getIPIndents() {
         int iIndents = 0;
-        iIndents += fobj.getCommonMarginBlock().startIndent.getValue(this);
-        iIndents += fobj.getCommonMarginBlock().endIndent.getValue(this);
+        iIndents += getTable().getCommonMarginBlock().startIndent.getValue(this);
+        iIndents += getTable().getCommonMarginBlock().endIndent.getValue(this);
         return iIndents;
     }
     
@@ -114,7 +129,7 @@ public class TableLayoutManager extends BlockStackingLayoutManager
         
         if (!bBreakBeforeServed) {
             try {
-                if (addKnuthElementsForBreakBefore(returnList)) {
+                if (addKnuthElementsForBreakBefore(returnList, context)) {
                     return returnList;
                 }
             } finally {
@@ -125,12 +140,12 @@ public class TableLayoutManager extends BlockStackingLayoutManager
         referenceBPD = context.getStackLimit().opt;
         referenceIPD = context.getRefIPD();
 
-        if (fobj.getInlineProgressionDimension().getOptimum(this).getEnum() != EN_AUTO) {
-            referenceIPD = fobj.getInlineProgressionDimension().getOptimum(this)
+        if (getTable().getInlineProgressionDimension().getOptimum(this).getEnum() != EN_AUTO) {
+            referenceIPD = getTable().getInlineProgressionDimension().getOptimum(this)
                     .getLength().getValue(this);
             contentIPD = referenceIPD;
         } else {
-            if (!fobj.isAutoLayout()) {
+            if (!getTable().isAutoLayout()) {
                 log.info("table-layout=\"fixed\" and width=\"auto\", "
                         + "but auto-layout not supported " 
                         + "=> assuming width=\"100%\"");
@@ -141,15 +156,6 @@ public class TableLayoutManager extends BlockStackingLayoutManager
             log.warn("Allocated IPD exceeds available reference IPD");
         }
 
-        MinOptMax stackSize = new MinOptMax();
-        //Add spacing
-        if (spaceAfter != null) {
-            stackSize.add(spaceAfter);
-        }
-        if (spaceBefore != null) {
-            stackSize.add(spaceBefore);
-        }
-
         // either works out table of column widths or if proportional-column-width function
         // is used works out total factor, so that value of single unit can be computed.
         int sumCols = 0;
@@ -172,16 +178,28 @@ public class TableLayoutManager extends BlockStackingLayoutManager
             }
         }
 
+        addKnuthElementsForSpaceBefore(returnList, alignment);
+        
+        if (getTable().isSeparateBorderModel()) {
+            addKnuthElementsForBorderPaddingBefore(returnList, !firstVisibleMarkServed);
+            firstVisibleMarkServed = true;
+        }
+
+        //Spaces, border and padding to be repeated at each break
+        addPendingMarks(context);
+
         LinkedList returnedList = null;
         LinkedList contentList = new LinkedList();
         //Position returnPosition = new NonLeafPosition(this, null);
         //Body prevLM = null;
 
         LayoutContext childLC = new LayoutContext(0);
+        /*
         childLC.setStackLimit(
               MinOptMax.subtract(context.getStackLimit(),
-                                 stackSize));
+                                 stackSize));*/
         childLC.setRefIPD(context.getRefIPD());
+        childLC.copyPendingMarksFrom(context);
 
         if (contentLM == null) {
             contentLM = new TableContentLayoutManager(this);
@@ -199,14 +217,13 @@ public class TableLayoutManager extends BlockStackingLayoutManager
         //Set index values on elements coming from the content LM
         Iterator iter = returnedList.iterator();
         while (iter.hasNext()) {
-            KnuthElement el = (KnuthElement)iter.next();
+            ListElement el = (ListElement)iter.next();
             notifyPos(el.getPosition());
         }
         log.debug(returnedList);
         
         if (returnedList.size() == 1
-                && ((KnuthElement) returnedList.getFirst()).isPenalty()
-                && ((KnuthPenalty) returnedList.getFirst()).getP() == -KnuthElement.INFINITE) {
+                && ((ListElement)returnedList.getFirst()).isForcedBreak()) {
             // a descendant of this block has break-before
             if (returnList.size() == 0) {
                 // the first child (or its first child ...) has
@@ -250,8 +267,7 @@ public class TableLayoutManager extends BlockStackingLayoutManager
             }*/
             contentList.addAll(returnedList);
             if (returnedList.size() > 0) {
-                if (((KnuthElement) returnedList.getLast()).isPenalty()
-                        && ((KnuthPenalty) returnedList.getLast()).getP() == -KnuthElement.INFINITE) {
+                if (((ListElement)returnedList.getLast()).isForcedBreak()) {
                     // a descendant of this block has break-after
                     if (false /*curLM.isFinished()*/) {
                         // there is no other content in this block;
@@ -267,8 +283,13 @@ public class TableLayoutManager extends BlockStackingLayoutManager
             }
         }
         wrapPositionElements(contentList, returnList);
-        addKnuthElementsForBreakAfter(returnList);
+        if (getTable().isSeparateBorderModel()) {
+            addKnuthElementsForBorderPaddingAfter(returnList, true);
+        }
+        addKnuthElementsForSpaceAfter(returnList, alignment);
+        addKnuthElementsForBreakAfter(returnList, context);
         setFinished(true);
+        resetSpaces();
         return returnList;
     }
     
@@ -282,14 +303,9 @@ public class TableLayoutManager extends BlockStackingLayoutManager
     public void addAreas(PositionIterator parentIter,
                          LayoutContext layoutContext) {
         getParentArea(null);
-        getPSLM().addIDToPage(fobj.getId());
+        getPSLM().addIDToPage(getTable().getId());
 
-        // if adjusted space before
-        double adjust = layoutContext.getSpaceAdjust();
-        addBlockSpacing(adjust, spaceBefore);
-        spaceBefore = null;
-
-        int startXOffset = fobj.getCommonMarginBlock().startIndent.getValue(this);
+        int startXOffset = getTable().getCommonMarginBlock().startIndent.getValue(this);
         
         // add column, body then row areas
 
@@ -305,25 +321,29 @@ public class TableLayoutManager extends BlockStackingLayoutManager
 
         curBlockArea.setBPD(tableHeight);
 
-        if (fobj.isSeparateBorderModel()) {
-            TraitSetter.addBorders(curBlockArea, fobj.getCommonBorderPaddingBackground(), this);
+        if (getTable().isSeparateBorderModel()) {
+            TraitSetter.addBorders(curBlockArea, 
+                    getTable().getCommonBorderPaddingBackground(), 
+                    discardBorderBefore, discardBorderAfter, false, false, this);
+            TraitSetter.addPadding(curBlockArea, 
+                    getTable().getCommonBorderPaddingBackground(), 
+                    discardPaddingBefore, discardPaddingAfter, false, false, this);
         }
         TraitSetter.addBackground(curBlockArea, 
-                fobj.getCommonBorderPaddingBackground(),
+                getTable().getCommonBorderPaddingBackground(),
                 this);
         TraitSetter.addMargins(curBlockArea,
-                fobj.getCommonBorderPaddingBackground(), 
-                fobj.getCommonMarginBlock(),
+                getTable().getCommonBorderPaddingBackground(), 
+                getTable().getCommonMarginBlock(),
                 this);
         TraitSetter.addBreaks(curBlockArea, 
-                fobj.getBreakBefore(), fobj.getBreakAfter());
+                getTable().getBreakBefore(), getTable().getBreakAfter());
+        TraitSetter.addSpaceBeforeAfter(curBlockArea, layoutContext.getSpaceAdjust(), 
+                effSpaceBefore, effSpaceAfter);
 
         flush();
 
-        // if adjusted space after
-        addBlockSpacing(adjust, spaceAfter);
-
-        //bodyBreaks.clear();
+        resetSpaces();
         curBlockArea = null;
     }
 
@@ -378,17 +398,13 @@ public class TableLayoutManager extends BlockStackingLayoutManager
         }
     }
 
-    /**
-     * @see org.apache.fop.layoutmgr.BlockLevelLayoutManager#negotiateBPDAdjustment(int, org.apache.fop.layoutmgr.KnuthElement)
-     */
+    /** @see org.apache.fop.layoutmgr.BlockLevelLayoutManager */
     public int negotiateBPDAdjustment(int adj, KnuthElement lastElement) {
         // TODO Auto-generated method stub
         return 0;
     }
 
-    /**
-     * @see org.apache.fop.layoutmgr.BlockLevelLayoutManager#discardSpace(org.apache.fop.layoutmgr.KnuthGlue)
-     */
+    /** @see org.apache.fop.layoutmgr.BlockLevelLayoutManager */
     public void discardSpace(KnuthGlue spaceGlue) {
         // TODO Auto-generated method stub
         
@@ -400,24 +416,24 @@ public class TableLayoutManager extends BlockStackingLayoutManager
     public boolean mustKeepTogether() {
         //TODO Keeps will have to be more sophisticated sooner or later
         return ((BlockLevelLayoutManager)getParent()).mustKeepTogether() 
-                || !fobj.getKeepTogether().getWithinPage().isAuto()
-                || !fobj.getKeepTogether().getWithinColumn().isAuto();
+                || !getTable().getKeepTogether().getWithinPage().isAuto()
+                || !getTable().getKeepTogether().getWithinColumn().isAuto();
     }
 
     /**
      * @see org.apache.fop.layoutmgr.BlockLevelLayoutManager#mustKeepWithPrevious()
      */
     public boolean mustKeepWithPrevious() {
-        return !fobj.getKeepWithPrevious().getWithinPage().isAuto()
-                || !fobj.getKeepWithPrevious().getWithinColumn().isAuto();
+        return !getTable().getKeepWithPrevious().getWithinPage().isAuto()
+                || !getTable().getKeepWithPrevious().getWithinColumn().isAuto();
     }
 
     /**
      * @see org.apache.fop.layoutmgr.BlockLevelLayoutManager#mustKeepWithNext()
      */
     public boolean mustKeepWithNext() {
-        return !fobj.getKeepWithNext().getWithinPage().isAuto()
-                || !fobj.getKeepWithNext().getWithinColumn().isAuto();
+        return !getTable().getKeepWithNext().getWithinPage().isAuto()
+                || !getTable().getKeepWithNext().getWithinColumn().isAuto();
     }
 
     // --------- Property Resolution related functions --------- //
@@ -461,4 +477,49 @@ public class TableLayoutManager extends BlockStackingLayoutManager
         return referenceBPD;
     }
     
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifySpace(RelSide side, MinOptMax effectiveLength) {
+        if (RelSide.BEFORE == side) {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceBefore + "-> " + effectiveLength);
+            }
+            this.effSpaceBefore = effectiveLength;
+        } else {
+            if (log.isDebugEnabled()) {
+                log.debug(this + ": Space " + side + ", " 
+                        + this.effSpaceAfter + "-> " + effectiveLength);
+            }
+            this.effSpaceAfter = effectiveLength;
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyBorder(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardBorderBefore = true;
+            } else {
+                this.discardBorderAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Border " + side + " -> " + effectiveLength);
+        }
+    }
+
+    /** @see org.apache.fop.layoutmgr.ConditionalElementListener */
+    public void notifyPadding(RelSide side, MinOptMax effectiveLength) {
+        if (effectiveLength == null) {
+            if (RelSide.BEFORE == side) {
+                this.discardPaddingBefore = true;
+            } else {
+                this.discardPaddingAfter = true;
+            }
+        }
+        if (log.isDebugEnabled()) {
+            log.debug(this + ": Padding " + side + " -> " + effectiveLength);
+        }
+    }
+    
 }
\ No newline at end of file
index f7a381a3e877ff44a81d259cb9d2482c0df9d3c8..00eeae4bab6661a3a7916ac3a1f1ddca7c38c89f 100644 (file)
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.fop.fo.Constants;
 import org.apache.fop.fo.flow.TableRow;
 import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
+import org.apache.fop.layoutmgr.BreakElement;
 import org.apache.fop.layoutmgr.ElementListUtils;
 import org.apache.fop.layoutmgr.KnuthBox;
 import org.apache.fop.layoutmgr.KnuthElement;
@@ -162,7 +163,7 @@ public class TableStepper {
     private void setupElementList(int column) {
         GridUnit gu = getActiveGridUnit(column);
         EffRow row = getActiveRow();
-        if (gu.isEmpty()){
+        if (gu.isEmpty()) {
             elementLists[column] = null;
             start[column] = 0;
             end[column] = -1;
@@ -296,14 +297,6 @@ public class TableStepper {
             
             //Create elements for step
             int effPenaltyLen = penaltyLen;
-            if (isSeparateBorderModel()) {
-                CommonBorderPaddingBackground borders 
-                    = getTableLM().getTable().getCommonBorderPaddingBackground(); 
-                effPenaltyLen += borders.getBorderBeforeWidth(false); 
-                effPenaltyLen += borders.getBorderAfterWidth(false); 
-                effPenaltyLen += borders.getPaddingBefore(false, getTableLM()); 
-                effPenaltyLen += borders.getPaddingAfter(false, getTableLM()); 
-            }
             TableContentPosition tcpos = new TableContentPosition(getTableLM(), 
                     gridUnitParts, getActiveRow());
             if (returnList.size() == 0) {
@@ -345,7 +338,8 @@ public class TableStepper {
                 p = -KnuthPenalty.INFINITE; //Overrides any keeps (see 4.8 in XSL 1.0)
                 clearBreakCondition();
             }
-            returnList.add(new KnuthPenalty(effPenaltyLen, p, false, penaltyPos, false));
+            //returnList.add(new KnuthPenalty(effPenaltyLen, p, false, penaltyPos, false));
+            returnList.add(new BreakElement(penaltyPos, effPenaltyLen, p, 0, context));
 
             log.debug("step=" + step + " (+" + increase + ")"
                     + " box=" + boxLen 
@@ -364,7 +358,7 @@ public class TableStepper {
             context.setFlags(LayoutContext.KEEP_WITH_NEXT_PENDING);
         }
         if (isBreakCondition()) {
-            ((KnuthPenalty)returnList.getLast()).setP(-KnuthPenalty.INFINITE);
+            ((BreakElement)returnList.getLast()).setPenaltyValue(-KnuthPenalty.INFINITE);
         }
         lastTCPos.setFlag(TableContentPosition.LAST_IN_ROWGROUP, true);
         return returnList;
index aceac1a87f86467e2a5f006029a17ed1342ed07a..ab2fc8588d6179a3c1296b14afc6de4cb557d076 100644 (file)
@@ -530,8 +530,9 @@ public abstract class AbstractRenderer
             int saveBP = currentBPPosition;
 
             if (block.getPositioning() == Block.ABSOLUTE) {
-                currentIPPosition = containingIPPosition + block.getXOffset();
-                currentBPPosition = containingBPPosition + block.getYOffset();
+                currentIPPosition += block.getXOffset();
+                currentBPPosition += block.getYOffset();
+                currentBPPosition += block.getSpaceBefore();
 
                 handleBlockTraits(block);
 
@@ -545,6 +546,7 @@ public abstract class AbstractRenderer
                 // relative blocks are offset
                 currentIPPosition += block.getXOffset();
                 currentBPPosition += block.getYOffset();
+                currentBPPosition += block.getSpaceBefore();
 
                 handleBlockTraits(block);
 
index 47469d1614aafd00566fec9e0fa2d02bc2b38e06..143e93ae054f4c018a70bc67b081ea443f0799ff 100644 (file)
@@ -162,6 +162,11 @@ public class MinOptMax implements java.io.Serializable, Cloneable {
         opt -= op.opt;
         max -= op.min;
     }
+    
+    /** @return true if this instance represents a zero-width length (min=opt=max=0) */
+    public boolean isNonZero() {
+        return (min != 0 || max != 0);
+    }
 
     /** @see java.lang.Object#toString() */
     public String toString() {
diff --git a/test/fotree/testcases/shorthand-prop-mix.fo b/test/fotree/testcases/shorthand-prop-mix.fo
new file mode 100644 (file)
index 0000000..822d5c7
--- /dev/null
@@ -0,0 +1,43 @@
+<?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$ -->
+<!-- This test verifies what happens if shorthand and normal properties are mixed. -->
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test">
+  <fo:layout-master-set>
+    <fo:simple-page-master master-name="A4" page-height="29.7cm" page-width="21cm" margin="2cm">
+      <fo:region-body/>
+    </fo:simple-page-master>
+  </fo:layout-master-set>
+  <fo:page-sequence master-reference="A4">
+    <fo:flow flow-name="xsl-region-body">
+      <fo:block border="solid 5pt"
+            border-before-width.conditionality="retain" border-after-width.conditionality="retain" 
+            padding="5pt"
+            padding-before.conditionality="retain" padding-after.conditionality="retain">
+        <test:assert property="border-before-width" expected="CondLength[1000mpt, RETAIN]"/>
+        <test:assert property="border-after-width" expected="CondLength[1000mpt, RETAIN]"/>
+        <test:assert property="padding-before" expected="CondLength[0mpt, RETAIN]"/>
+        <test:assert property="padding-after" expected="CondLength[0mpt, RETAIN]"/>
+        <!-- Discussion: see http://marc.theaimsgroup.com/?t=112607409300001&r=1&w=2 -->
+        <fo:block background-color="yellow">Hello World!</fo:block>
+        <fo:block>Hello World!</fo:block>
+        <fo:block>Hello World!</fo:block>
+        <fo:block background-color="orange">Hello World!</fo:block>
+      </fo:block>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>
diff --git a/test/fotree/testcases/table_border-separation.fo b/test/fotree/testcases/table_border-separation.fo
new file mode 100644 (file)
index 0000000..5819255
--- /dev/null
@@ -0,0 +1,79 @@
+<?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$ -->
+<!-- This test verifies the correct values of border-separation and its shorthand, border-spacing. -->
+<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:test="http://xmlgraphics.apache.org/fop/test">
+  <fo:layout-master-set>
+    <fo:simple-page-master master-name="A4" page-height="29.7cm" page-width="21cm">
+      <fo:region-body/>
+    </fo:simple-page-master>
+  </fo:layout-master-set>
+  <fo:page-sequence master-reference="A4">
+    <fo:flow flow-name="xsl-region-body">
+      <fo:table table-layout="fixed" border-collapse="separate" border-spacing="5pt 2pt">
+        <test:assert property="border-separation.inline-progression-direction" expected="5000mpt"/>
+        <test:assert property="border-separation.block-progression-direction" expected="2000mpt"/>
+        <fo:table-column column-width="160pt"/>
+        <fo:table-column column-width="160pt"/>
+        <fo:table-body>
+          <fo:table-row>
+            <fo:table-cell>
+              <fo:block>cell1</fo:block>
+            </fo:table-cell>
+            <fo:table-cell border="solid 5pt black">
+              <fo:block>cell2</fo:block>
+            </fo:table-cell>
+          </fo:table-row>
+          <fo:table-row>
+            <fo:table-cell border="solid 5pt">
+              <fo:block>cell3</fo:block>
+            </fo:table-cell>
+            <fo:table-cell height="20pt" border="solid 10pt red">
+              <fo:block>cell4</fo:block>
+            </fo:table-cell>
+          </fo:table-row>
+        </fo:table-body>
+      </fo:table>
+      <fo:table table-layout="fixed" border-collapse="separate" 
+            border-separation.inline-progression-direction="5pt" 
+            border-separation.block-progression-direction="2pt">
+        <test:assert property="border-separation.inline-progression-direction" expected="5000mpt"/>
+        <test:assert property="border-separation.block-progression-direction" expected="2000mpt"/>
+        <fo:table-column column-width="160pt"/>
+        <fo:table-column column-width="160pt"/>
+        <fo:table-body start-indent="0pt" end-indent="0pt">
+          <fo:table-row>
+            <fo:table-cell>
+              <fo:block>cell1</fo:block>
+            </fo:table-cell>
+            <fo:table-cell border="solid 5pt black">
+              <fo:block>cell2</fo:block>
+            </fo:table-cell>
+          </fo:table-row>
+          <fo:table-row>
+            <fo:table-cell border="solid 5pt">
+              <fo:block>cell3</fo:block>
+            </fo:table-cell>
+            <fo:table-cell height="20pt" border="solid 10pt red">
+              <fo:block>cell4</fo:block>
+            </fo:table-cell>
+          </fo:table-row>
+        </fo:table-body>
+      </fo:table>
+    </fo:flow>
+  </fo:page-sequence>
+</fo:root>
index ebd8335c16eefb7c57bc8fac4ff19fc3d1530e5f..f773c76a670810fedb8f180d0fe896624d6fb854 100644 (file)
@@ -23,6 +23,7 @@ import org.apache.fop.apps.FOPException;
 import org.apache.fop.fo.FONode;
 import org.apache.fop.fo.FOPropertyMapping;
 import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.properties.LengthPairProperty;
 import org.apache.fop.fo.properties.Property;
 import org.apache.fop.fotreetest.ResultCollector;
 
@@ -51,13 +52,29 @@ public class AssertElement extends TestObj {
         //super.processNode(elementName, locator, attlist, propertyList);
 
         ResultCollector collector = ResultCollector.getInstance();
-        String propName = attlist.getValue("property"); 
+        String propName = attlist.getValue("property");
+        String component = null;
+        int dotIndex = propName.indexOf('.');
+        if (dotIndex >= 0) {
+            component = propName.substring(dotIndex + 1);
+            propName = propName.substring(0, dotIndex);
+        }
         int propID = FOPropertyMapping.getPropertyId(propName);
         if (propID < 0) {
             collector.notifyException(new IllegalArgumentException(
                     "Property not found: " + propName));
         } else {
-            Property prop = propertyList.getParentPropertyList().get(propID);
+            Property prop;
+            prop = propertyList.getParentPropertyList().get(propID);
+            if (component != null) {
+                //Access subcomponent
+                Property mainProp = prop;
+                prop = null;
+                LengthPairProperty lpp = mainProp.getLengthPair();
+                if (lpp != null) {
+                    prop = lpp.getComponent(FOPropertyMapping.getSubPropertyId(component));
+                }
+            }
             String s = String.valueOf(prop);
             String expected = attlist.getValue("expected");
             if (!expected.equals(s)) {
index 255cff900979e88308518273e4e7cdbcb34b0e45..881a8c3ee979c82420a404b47ff259f5be9f41aa 100644 (file)
@@ -23,7 +23,7 @@ import java.util.ListIterator;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.fop.layoutmgr.KnuthElement;
+import org.apache.fop.layoutmgr.ListElement;
 import org.apache.fop.layoutmgr.ElementListObserver.Observer;
 
 /**
@@ -49,9 +49,9 @@ public class LoggingElementListObserver implements Observer {
             return;
         }
         ListIterator tempIter = elementList.listIterator();
-        KnuthElement temp;
+        ListElement temp;
         while (tempIter.hasNext()) {
-            temp = (KnuthElement) tempIter.next();
+            temp = (ListElement) tempIter.next();
             if (temp.isBox()) {
                 log.debug(tempIter.previousIndex()
                         + ") " + temp);
index 91db410575545723dbb34b300e4511ff5a6e55dc..6159cda4bd43f994a32833681c69f1ac23209646 100644 (file)
@@ -1,11 +1,12 @@
 block-container_reference-orientation_bug36391.xml
+block-container_space-before_space-after_3.xml
 block_font-stretch.xml
 block_padding_2.xml
-block_space-before_space-after_2.xml
-block_space-before_space-after_3.xml
+block_space-before_space-after_8.xml
 block_word-spacing.xml
 block_word-spacing_text-align_justify.xml
 external-graphic_oversized.xml
+footnote_space-resolution.xml
 inline-block_keep-together.xml
 inline_block_nested_3.xml
 inline-container_block_nested.xml
@@ -16,7 +17,6 @@ inline_word-spacing_text-align_justify.xml
 leader-alignment.xml
 list-block_keep-with-previous.xml
 list-item_block_keep-with-previous.xml
-list-item_space-before_space-after_2.xml
 page-breaking_4.xml
 page-breaking_6.xml
 page-height_indefinite_simple.xml
@@ -31,6 +31,7 @@ table_border-collapse_collapse_1.xml
 table_border-collapse_collapse_2.xml
 table_border_padding.xml
 table-cell_block_keep-with-previous.xml
+table-cell_border_padding_conditionality.xml
 table-column_first-row-width.xml
 table-header_background-image.xml
 table-row_keep-with-previous.xml
index be7035e9e5077e6bfb4b0d22b72df7de499577f8..b483edbd3b65b760a7543c22fb619ea8b9174a6a 100644 (file)
   </fo>
   <checks>
     <!-- first block-container -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@is-viewport-area"/>
-    <eval expected="[1.0 0.0 0.0 1.0 0.0 0.0]" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ctm"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipd"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipda"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpd"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpda"/>
+    <true xpath="//flow/block[1]/@is-viewport-area"/>
+    <eval expected="[1.0 0.0 0.0 1.0 0.0 0.0]" xpath="//flow/block[1]/@ctm"/>
+    <eval expected="120000" xpath="//flow/block[1]/@ipd"/>
+    <eval expected="120000" xpath="//flow/block[1]/@ipda"/>
+    <eval expected="80000" xpath="//flow/block[1]/@bpd"/>
+    <eval expected="80000" xpath="//flow/block[1]/@bpda"/>
     <!--   -> reference area -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@is-reference-area"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@ipd"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@ipda"/>
-    <eval expected="28800" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@bpd"/>
-    <eval expected="28800" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@bpda"/>
+    <true xpath="//flow/block[1]/block[1]/@is-reference-area"/>
+    <eval expected="120000" xpath="//flow/block[1]/block[1]/@ipd"/>
+    <eval expected="120000" xpath="//flow/block[1]/block[1]/@ipda"/>
+    <eval expected="28800" xpath="//flow/block[1]/block[1]/@bpd"/>
+    <eval expected="28800" xpath="//flow/block[1]/block[1]/@bpda"/>
 
     <!-- space-before of second block-container -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpda"/>
+    <eval expected="10000" xpath="//flow/block[2]/@space-before"/>
     
     <!-- second block-container -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@is-viewport-area"/>
-    <eval expected="[0.0 -1.0 1.0 0.0 0.0 80000.0]" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@ctm"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@ipd"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@ipda"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@bpd"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@bpda"/>
+    <true xpath="//flow/block[2]/@is-viewport-area"/>
+    <eval expected="[0.0 -1.0 1.0 0.0 0.0 80000.0]" xpath="//flow/block[2]/@ctm"/>
+    <eval expected="120000" xpath="//flow/block[2]/@ipd"/>
+    <eval expected="120000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="80000" xpath="//flow/block[2]/@bpd"/>
+    <eval expected="100000" xpath="//flow/block[2]/@bpda"/>
     <!--   -> reference area -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/block[1]/@is-reference-area"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/block[1]/@ipd"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/block[1]/@ipda"/>
-    <eval expected="43200" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/block[1]/@bpd"/>
-    <eval expected="43200" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/block[1]/@bpda"/>
+    <true xpath="//flow/block[2]/block[1]/@is-reference-area"/>
+    <eval expected="80000" xpath="//flow/block[2]/block[1]/@ipd"/>
+    <eval expected="80000" xpath="//flow/block[2]/block[1]/@ipda"/>
+    <eval expected="43200" xpath="//flow/block[2]/block[1]/@bpd"/>
+    <eval expected="43200" xpath="//flow/block[2]/block[1]/@bpda"/>
 
     <!-- space-after of second block-container -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bpda"/>
+    <eval expected="10000" xpath="//flow/block[2]/@space-after"/>
 
     <!-- third block-container -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@is-viewport-area"/>
-    <eval expected="[-1.0 -0.0 0.0 -1.0 120000.0 80000.0]" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@ctm"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@ipd"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@ipda"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@bpd"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@bpda"/>
+    <true xpath="//flow/block[3]/@is-viewport-area"/>
+    <eval expected="[-1.0 -0.0 0.0 -1.0 120000.0 80000.0]" xpath="//flow/block[3]/@ctm"/>
+    <eval expected="120000" xpath="//flow/block[3]/@ipd"/>
+    <eval expected="120000" xpath="//flow/block[3]/@ipda"/>
+    <eval expected="80000" xpath="//flow/block[3]/@bpd"/>
+    <eval expected="80000" xpath="//flow/block[3]/@bpda"/>
     <!--   -> reference area -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/@is-reference-area"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/@ipd"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/@ipda"/>
-    <eval expected="61600" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/@bpd"/>
-    <eval expected="61600" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/@bpda"/>
+    <true xpath="//flow/block[3]/block[1]/@is-reference-area"/>
+    <eval expected="120000" xpath="//flow/block[3]/block[1]/@ipd"/>
+    <eval expected="120000" xpath="//flow/block[3]/block[1]/@ipda"/>
+    <eval expected="61600" xpath="//flow/block[3]/block[1]/@bpd"/>
+    <eval expected="61600" xpath="//flow/block[3]/block[1]/@bpda"/>
     <!-- contents (spacer first, then three lines) -->
-    <eval expected="18400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/block[1]/@bpda"/>
-    <eval expected="28800" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/block[2]/@bpda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/block[1]/block[3]/@bpda"/>
+    <eval expected="18400" xpath="//flow/block[3]/block[1]/block[1]/@bpda"/>
+    <eval expected="28800" xpath="//flow/block[3]/block[1]/block[2]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[3]/block[1]/block[3]/@bpda"/>
 
     <!-- space-before of fourth block-container -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bpda"/>
+    <eval expected="10000" xpath="//flow/block[4]/@space-before"/>
     
     <!-- fourth block-container -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@is-viewport-area"/>
-    <eval expected="[0.0 1.0 -1.0 0.0 120000.0 0.0]" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@ctm"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@ipd"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@ipda"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@bpd"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@bpda"/>
+    <true xpath="//flow/block[4]/@is-viewport-area"/>
+    <eval expected="[0.0 1.0 -1.0 0.0 120000.0 0.0]" xpath="//flow/block[4]/@ctm"/>
+    <eval expected="120000" xpath="//flow/block[4]/@ipd"/>
+    <eval expected="120000" xpath="//flow/block[4]/@ipda"/>
+    <eval expected="80000" xpath="//flow/block[4]/@bpd"/>
+    <eval expected="90000" xpath="//flow/block[4]/@bpda"/>
     <!--   -> reference area -->
-    <true xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/@is-reference-area"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/@ipd"/>
-    <eval expected="80000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/@ipda"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/@bpd"/>
-    <eval expected="120000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/@bpda"/>
+    <true xpath="//flow/block[4]/block[1]/@is-reference-area"/>
+    <eval expected="80000" xpath="//flow/block[4]/block[1]/@ipd"/>
+    <eval expected="80000" xpath="//flow/block[4]/block[1]/@ipda"/>
+    <eval expected="120000" xpath="//flow/block[4]/block[1]/@bpd"/>
+    <eval expected="120000" xpath="//flow/block[4]/block[1]/@bpda"/>
     <!-- contents (spacer first, then three lines) -->
-    <eval expected="76800" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/block[1]/@bpda"/>
-    <eval expected="28800" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/block[2]/@bpda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/block[1]/block[3]/@bpda"/>
+    <eval expected="76800" xpath="//flow/block[4]/block[1]/block[1]/@bpda"/>
+    <eval expected="28800" xpath="//flow/block[4]/block[1]/block[2]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[4]/block[1]/block[3]/@bpda"/>
 
   </checks>
 </testcase>
diff --git a/test/layoutengine/testcases/block-container_space-before_space-after_1.xml b/test/layoutengine/testcases/block-container_space-before_space-after_1.xml
new file mode 100644 (file)
index 0000000..37b7b87
--- /dev/null
@@ -0,0 +1,160 @@
+<?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 space properties on block-container.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="retain">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block-container space-before.optimum="20pt" space-before.conditionality="retain" space-after.optimum="10pt" space-after.conditionality="retain">
+            <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+            </fo:block>
+          </fo:block-container>
+          <fo:block space-before.optimum="10pt" space-before.conditionality="retain" space-after.optimum="20pt" space-after.conditionality="retain">
+Two blocks, testing conditionality="retain".
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="discard">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block-container space-before.optimum="20pt" space-before.conditionality="discard" space-after.optimum="10pt" space-after.conditionality="discard">
+            <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+            </fo:block>
+          </fo:block-container>
+          <fo:block space-before.optimum="10pt" space-before.conditionality="discard" space-after.optimum="20pt" space-after.conditionality="discard">
+Two blocks, testing conditionality="discard".
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="retain">
+      <box w="0"/> <!-- Helper box bearing the SpaceHandlingPosition and making sure the glue gets processed -->
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000" y="0" z="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000" y="0" z="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000" y="0" z="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000" y="0" z="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      
+      <!-- skip three more lines -->
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000" y="0" z="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000" y="0" z="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="10000" aux="true"/>
+      <penalty w="0" p="0"/>
+      <glue w="-10000" aux="true"/>
+      
+      <box w="0" aux="true"/>
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="10000" aux="true"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0" aux="true"/>
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="20000" aux="true"/>
+      
+      <box w="0" aux="true"/> <!-- This is used to make sure the preceding glue is not cut off -->
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="discard">
+      <box w="0"/> <!-- Helper box used to notify the LM for the addAreas stage about the discarded spaces -->
+      <box w="14400"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <glue w="10000"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0"/> <!-- SpaceHandlingPosition-bearing helper box -->
+      
+      <skip>3</skip>
+    </element-list>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block-container_space-before_space-after_2.xml b/test/layoutengine/testcases/block-container_space-before_space-after_2.xml
new file mode 100644 (file)
index 0000000..d742b3e
--- /dev/null
@@ -0,0 +1,93 @@
+<?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 block-level space properties. Demonstrates that spaces are repeated on every generated area.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="30pt">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:flow flow-name="xsl-region-body" line-height="10pt" font-size="9pt">
+          <fo:block-container space-before="5pt" space-before.conditionality="retain" background-color="yellow">
+             <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>line 5</fo:block>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker">
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <eval expected="3" xpath="count(//pageViewport)"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="2" xpath="count(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block)"/>
+    <eval expected="2" xpath="count(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block)"/>
+    
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block-container_space-before_space-after_3.xml b/test/layoutengine/testcases/block-container_space-before_space-after_3.xml
new file mode 100644 (file)
index 0000000..6e9d607
--- /dev/null
@@ -0,0 +1,126 @@
+<?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 space properties on block-containers. The focus is on space properties on content inside the block-containers.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="2in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="no-height">
+        <fo:flow flow-name="xsl-region-body" line-height="10pt" font-size="9pt">
+          <fo:block-container space-before="1em" background-color="yellow" id="page1-bc1">
+            <fo:block space-before="1em">line 1</fo:block>
+            <fo:block>line 2</fo:block>
+          </fo:block-container>
+          <fo:block>A block between block-containers.</fo:block>
+          <fo:block-container background-color="yellow" id="page1-bc2">
+            <!-- ATM, the block-container without height behaves like a block which is wrong. It generates a viewport/reference pair. -->
+            <fo:block space-before="1em">line 1</fo:block>
+            <fo:block>line 2</fo:block>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="with-height">
+        <fo:flow flow-name="xsl-region-body" line-height="10pt" font-size="9pt">
+          <fo:block-container space-before="1em" height="50pt" background-color="yellow" id="page2-bc1">
+            <fo:block space-before="1em">line 1</fo:block>
+            <fo:block>line 2</fo:block>
+          </fo:block-container>
+          <fo:block>A block between block-containers.</fo:block>
+          <fo:block-container height="50pt" background-color="yellow" id="page2-bc2">
+            <fo:block space-before="1em">line 1</fo:block>
+            <fo:block>line 2</fo:block>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="no-height">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <box w="10000"/>
+      
+      <penalty w="0" p="0"/>
+      <box w="10000"/> <!-- block between block-containers -->
+      <penalty w="0" p="0"/>
+      
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="block-container" id="page1-bc1">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="block-container" id="page1-bc2">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="no-height">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      
+      <box w="50000"/>
+      
+      <penalty w="0" p="0"/>
+      <box w="10000"/> <!-- block between block-containers -->
+      <penalty w="0" p="0"/>
+      
+      <box w="50000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="block-container" id="page2-bc1">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      
+      <box w="10000"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="block-container" id="page2-bc2">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      
+      <box w="10000"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+  </checks>
+</testcase>
index dd32789178788edea4fbcae5f96f91a3f7e39fc4..caf2835425cb1c847f0f3c70ad73162f9dbf5893 100644 (file)
   </fo>
   <checks>
     <!-- First block, no gap -->
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-start"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-end"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-before"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-after"/>
-    <eval expected="5000 5000 5000 5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bap"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipd"/>
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipda"/>
-    <eval expected="24400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpd"/>
-    <eval expected="34400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpda"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[1]/@border-start"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[1]/@border-end"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[1]/@border-before"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[1]/@border-after"/>
+    <eval expected="5000 5000 5000 5000" xpath="//flow/block[1]/@bap"/>
+    <eval expected="350000" xpath="//flow/block[1]/@ipd"/>
+    <eval expected="360000" xpath="//flow/block[1]/@ipda"/>
+    <eval expected="24400" xpath="//flow/block[1]/@bpd"/>
+    <eval expected="34400" xpath="//flow/block[1]/@bpda"/>
     <!-- Nested block of first block -->
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-start"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-after"/>
-    <eval expected="5000 5000 5000 5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@bap"/>
-    <eval expected="340000" 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="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@bpd"/>
-    <eval expected="24400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@bpda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[1]/block[1]/@border-start"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[1]/block[1]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[1]/block[1]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[1]/block[1]/@border-after"/>
+    <eval expected="5000 5000 5000 5000" xpath="//flow/block[1]/block[1]/@bap"/>
+    <eval expected="340000" xpath="//flow/block[1]/block[1]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[1]/block[1]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/@bpd"/>
+    <eval expected="24400" xpath="//flow/block[1]/block[1]/@bpda"/>
 
     <!-- Second block, 5pt gap -->
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@border-start"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@border-end"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@border-before"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@border-after"/>
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@padding-start"/>
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@padding-end"/>
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@padding-before"/>
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@padding-after"/>
-    <eval expected="10000 10000 10000 10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bap"/>
-    <eval expected="340000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipd"/>
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipda"/>
-    <eval expected="24400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpd"/>
-    <eval expected="44400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpda"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[2]/@border-start"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[2]/@border-end"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[2]/@border-before"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[2]/@border-after"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-after"/>
+    <eval expected="10000 10000 10000 10000" xpath="//flow/block[2]/@bap"/>
+    <eval expected="340000" xpath="//flow/block[2]/@ipd"/>
+    <eval expected="360000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="24400" xpath="//flow/block[2]/@bpd"/>
+    <eval expected="44400" xpath="//flow/block[2]/@bpda"/>
     <!-- Nested block of second block -->
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@border-start"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@border-after"/>
-    <eval expected="5000 5000 5000 5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@bap"/>
-    <eval expected="330000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@ipd"/>
-    <eval expected="340000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@bpd"/>
-    <eval expected="24400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@bpda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/block[1]/@border-start"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/block[1]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/block[1]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/block[1]/@border-after"/>
+    <eval expected="5000 5000 5000 5000" xpath="//flow/block[2]/block[1]/@bap"/>
+    <eval expected="330000" xpath="//flow/block[2]/block[1]/@ipd"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[1]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/@bpd"/>
+    <eval expected="24400" xpath="//flow/block[2]/block[1]/@bpda"/>
 
     <!-- third block, no gap between borders but margin around outer block -->
     <!--     space before block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[3]/@space-before"/>
     <!--     actual block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@space-start"/>
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@space-end"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@border-start"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@border-end"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@border-before"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@border-after"/>
-    <eval expected="5000 5000 5000 5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bap"/>
-    <eval expected="340000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@ipd"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@ipda"/>
-    <eval expected="24400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bpd"/>
-    <eval expected="34400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bpda"/>
+    <eval expected="5000" xpath="//flow/block[3]/@space-start"/>
+    <eval expected="5000" xpath="//flow/block[3]/@space-end"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[3]/@border-start"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[3]/@border-end"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[3]/@border-before"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[3]/@border-after"/>
+    <eval expected="5000 5000 5000 5000" xpath="//flow/block[3]/@bap"/>
+    <eval expected="340000" xpath="//flow/block[3]/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[3]/@ipda"/>
+    <eval expected="24400" xpath="//flow/block[3]/@bpd"/>
+    <eval expected="44400" xpath="//flow/block[3]/@bpda"/>
     <!--     space after block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[3]/@space-after"/>
 
     <!-- Nested block of third block -->
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@border-start"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@border-after"/>
-    <eval expected="5000 5000 5000 5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@bap"/>
-    <eval expected="330000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@ipd"/>
-    <eval expected="340000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@bpd"/>
-    <eval expected="24400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/block[1]/@bpda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[3]/block[1]/@border-start"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[3]/block[1]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[3]/block[1]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[3]/block[1]/@border-after"/>
+    <eval expected="5000 5000 5000 5000" xpath="//flow/block[3]/block[1]/@bap"/>
+    <eval expected="330000" xpath="//flow/block[3]/block[1]/@ipd"/>
+    <eval expected="340000" xpath="//flow/block[3]/block[1]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[3]/block[1]/@bpd"/>
+    <eval expected="24400" xpath="//flow/block[3]/block[1]/@bpda"/>
 
     <!-- Fourth block, looks like the second block, but using margin on inner block instead of padding on outer block -->
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@border-start"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@border-end"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@border-before"/>
-    <eval expected="(solid,#0000ff,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@border-after"/>
-    <eval expected="5000 5000 5000 5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bap"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@ipd"/>
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@ipda"/>
-    <eval expected="34400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bpd"/>
-    <eval expected="44400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bpda"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[4]/@border-start"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[4]/@border-end"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[4]/@border-before"/>
+    <eval expected="(solid,#0000ff,5000)" xpath="//flow/block[4]/@border-after"/>
+    <eval expected="5000 5000 5000 5000" xpath="//flow/block[4]/@bap"/>
+    <eval expected="350000" xpath="//flow/block[4]/@ipd"/>
+    <eval expected="360000" xpath="//flow/block[4]/@ipda"/>
+    <eval expected="34400" xpath="//flow/block[4]/@bpd"/>
+    <eval expected="44400" xpath="//flow/block[4]/@bpda"/>
     <!-- Nested block of second block -->
     <!--     space before block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[1]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[4]/block[1]/@space-before"/>
     <!--     actual block -->
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@space-start"/>
-    <eval expected="10000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@space-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@border-start"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@border-after"/>
-    <eval expected="5000 5000 5000 5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@bap"/>
-    <eval expected="330000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@ipd"/>
-    <eval expected="340000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@bpd"/>
-    <eval expected="24400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[2]/@bpda"/>
+    <eval expected="10000" xpath="//flow/block[4]/block[1]/@space-start"/>
+    <eval expected="10000" xpath="//flow/block[4]/block[1]/@space-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/block[1]/@border-start"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/block[1]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/block[1]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/block[1]/@border-after"/>
+    <eval expected="5000 5000 5000 5000" xpath="//flow/block[4]/block[1]/@bap"/>
+    <eval expected="330000" xpath="//flow/block[4]/block[1]/@ipd"/>
+    <eval expected="340000" xpath="//flow/block[4]/block[1]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[4]/block[1]/@bpd"/>
+    <eval expected="34400" xpath="//flow/block[4]/block[1]/@bpda"/>
     <!--     space after block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/block[3]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[4]/block[1]/@space-after"/>
 
   </checks>
 </testcase>
index 8259c0a0a218e95d5c7980dae9353ebad956c790..3723e5da00084da4deff6802a0331966ee81b964 100644 (file)
     </fo:root>
   </fo>
   <checks>
-    <!-- padding-left -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-start"/>
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bap"/>
-    <eval expected="355000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipd"/>
-    <eval expected="355000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpd"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpda"/>
-    <!-- padding-right -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-end"/>
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bap"/>
-    <eval expected="355000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipd"/>
-    <eval expected="355000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpd"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpda"/>
-    <!-- padding-top -->
+    <!-- margin-left -->
+    <eval expected="5000" xpath="//flow/block[1]/@space-start"/>
+    <eval expected="0 0 0 0" xpath="//flow/block[1]/@bap"/>
+    <eval expected="355000" xpath="//flow/block[1]/@ipd"/>
+    <eval expected="355000" xpath="//flow/block[1]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[1]/@bpd"/>
+    <eval expected="14400" xpath="//flow/block[1]/@bpda"/>
+    <!-- margin-right -->
+    <eval expected="5000" xpath="//flow/block[2]/@space-end"/>
+    <eval expected="0 0 0 0" xpath="//flow/block[2]/@bap"/>
+    <eval expected="355000" xpath="//flow/block[2]/@ipd"/>
+    <eval expected="355000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[2]/@bpd"/>
+    <eval expected="14400" xpath="//flow/block[2]/@bpda"/>
+    <!-- margin-top -->
     <!--     space before block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[3]/@space-before"/>
     <!--     actual block -->
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bap"/>
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bpda"/>
-    <!-- padding-bottom -->
+    <eval expected="0 0 0 0" xpath="//flow/block[3]/@bap"/>
+    <eval expected="360000" xpath="//flow/block[3]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[3]/@bpd"/>
+    <eval expected="19400" xpath="//flow/block[3]/@bpda"/>
+    <!-- margin-bottom -->
     <!--     actual block -->
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@bap"/>
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@bpda"/>
+    <eval expected="0 0 0 0" xpath="//flow/block[4]/@bap"/>
+    <eval expected="360000" xpath="//flow/block[4]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[4]/@bpd"/>
+    <eval expected="19400" xpath="//flow/block[4]/@bpda"/>
     <!--     space after block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[4]/@space-after"/>
   </checks>
 </testcase>
index da022fb3bd9e96f26935880f635aa1ab26430678..ea43a11cd50235d3094895597ce143028df99bd0 100644 (file)
     </fo:root>
   </fo>
   <checks>
-    <eval expected="0" xpath="//flow/block[1]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[1]/@bpd"/>
-    <eval expected="324000" xpath="//flow/block[2]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[2]/@start-indent"/>
-    <eval expected="18000" xpath="//flow/block[2]/@end-indent"/>
-    <eval expected="18000" xpath="//flow/block[2]/@space-start"/>
-    <eval expected="18000" xpath="//flow/block[2]/@space-end"/>
-    <eval expected="0" xpath="//flow/block[2]/block[1]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[2]/block[1]/@bpd"/>
-    <eval expected="288000" xpath="//flow/block[2]/block[2]/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[2]/block[2]/@start-indent"/>
-    <eval expected="36000" xpath="//flow/block[2]/block[2]/@end-indent"/>
-    <eval expected="36000" xpath="//flow/block[2]/block[2]/@space-start"/>
-    <eval expected="36000" xpath="//flow/block[2]/block[2]/@space-end"/>
-    <eval expected="0" xpath="//flow/block[2]/block[3]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[2]/block[3]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[3]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[3]/@bpd"/>
+    <element-list category="breaker">
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="18000" y="0" z="0"/>
+      <box w="14400"/>
+      <box w="14400"/>
+      <penalty w="0" p="INF"/>
+      <glue w="18000" y="0" z="0"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <box w="14400"/>
+      <skip>3</skip>
+    </element-list>
+  
+    <true xpath="not(boolean(//flow/block[1]/@space-before))"/> <!-- space collapsed under space resolution rules -->
+    <eval expected="324000" xpath="//flow/block[1]/@ipd"/>
+    <eval expected="18000" xpath="//flow/block[1]/@start-indent"/>
+    <eval expected="18000" xpath="//flow/block[1]/@end-indent"/>
+    <eval expected="18000" xpath="//flow/block[1]/@space-start"/>
+    <eval expected="18000" xpath="//flow/block[1]/@space-end"/>
+    
+    <eval expected="18000" xpath="//flow/block[1]/block[1]/@space-before"/>
+    <eval expected="288000" xpath="//flow/block[1]/block[1]/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[1]/block[1]/@start-indent"/>
+    <eval expected="36000" xpath="//flow/block[1]/block[1]/@end-indent"/>
+    <eval expected="36000" xpath="//flow/block[1]/block[1]/@space-start"/>
+    <eval expected="36000" xpath="//flow/block[1]/block[1]/@space-end"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/@space-after))"/>  <!-- space collapsed under space resolution rules -->
+    <true xpath="not(boolean(//flow/block[1]/block[2]))"/>
+    
+    <eval expected="18000" xpath="//flow/block[1]/@space-after"/>
   </checks>
 </testcase>
index f3f9b531c7d2a5e4b3f8291ba55efeaffad32a48..c84a816c5f75b96fbb711f08f67562d55bf72b19 100644 (file)
     </fo:root>
   </fo>
   <checks>
-    <eval expected="0" xpath="//flow/block[1]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[1]/@bpd"/>
-    <eval expected="324000" xpath="//flow/block[2]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[2]/@start-indent"/>
-    <eval expected="18000" xpath="//flow/block[2]/@end-indent"/>
-    <eval expected="18000" xpath="//flow/block[2]/@space-start"/>
-    <eval expected="18000" xpath="//flow/block[2]/@space-end"/>
-    <eval expected="0" xpath="//flow/block[2]/block[1]/@ipd"/>
-    <eval expected="16200" xpath="//flow/block[2]/block[1]/@bpd"/>
-    <eval expected="291600" xpath="//flow/block[2]/block[2]/@ipd"/>
-    <eval expected="34200" xpath="//flow/block[2]/block[2]/@start-indent"/>
-    <eval expected="34200" xpath="//flow/block[2]/block[2]/@end-indent"/>
-    <eval expected="34200" xpath="//flow/block[2]/block[2]/@space-start"/>
-    <eval expected="34200" xpath="//flow/block[2]/block[2]/@space-end"/>
-    <eval expected="0" xpath="//flow/block[2]/block[3]/@ipd"/>
-    <eval expected="16200" xpath="//flow/block[2]/block[3]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[3]/@ipd"/>
-    <eval expected="18000" xpath="//flow/block[3]/@bpd"/>
+    <element-list category="breaker">
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="18000" y="0" z="0"/>
+      <box w="14400"/>
+      <box w="14400"/>
+      <penalty w="0" p="INF"/>
+      <glue w="18000" y="0" z="0"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <box w="14400"/>
+      <skip>3</skip>
+    </element-list>
+  
+    <eval expected="18000" xpath="//flow/block[1]/@space-before"/>
+    <eval expected="324000" xpath="//flow/block[1]/@ipd"/>
+    <eval expected="18000" xpath="//flow/block[1]/@start-indent"/>
+    <eval expected="18000" xpath="//flow/block[1]/@end-indent"/>
+    <eval expected="18000" xpath="//flow/block[1]/@space-start"/>
+    <eval expected="18000" xpath="//flow/block[1]/@space-end"/>
+    
+    <true xpath="not(boolean(//flow/block[1]/block[1]/@space-before))"/>  <!-- space collapsed under space resolution rules -->
+    <eval expected="291600" xpath="//flow/block[1]/block[1]/@ipd"/>
+    <eval expected="34200" xpath="//flow/block[1]/block[1]/@start-indent"/>
+    <eval expected="34200" xpath="//flow/block[1]/block[1]/@end-indent"/>
+    <eval expected="34200" xpath="//flow/block[1]/block[1]/@space-start"/>
+    <eval expected="34200" xpath="//flow/block[1]/block[1]/@space-end"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/@space-after))"/>  <!-- space collapsed under space resolution rules -->
+    <true xpath="not(boolean(//flow/block[1]/block[2]))"/>
+    
+    <eval expected="18000" xpath="//flow/block[1]/@space-after"/>
   </checks>
 </testcase>
index 8dc53fd9012c3f807307c84218a3a718fd9a5428..25ac7d553c206eccc74a7654a6cbbd14f8185053 100644 (file)
       </fo:layout-master-set>
       <fo:page-sequence master-reference="normal" white-space-collapse="true">
         <fo:flow flow-name="xsl-region-body">
+          <fo:block border-before-style="solid" border-before-width="1pt"/> <!-- These are to avoid stacking constraints between tests -->
           <fo:block margin="5pt">all</fo:block>
+          <fo:block border-before-style="solid" border-before-width="1pt"/>
           <fo:block margin="0pt 5pt">left/right</fo:block>
+          <fo:block border-before-style="solid" border-before-width="1pt"/>
           <fo:block margin="5pt 0pt">top/bottom</fo:block>
+          <fo:block border-before-style="solid" border-before-width="1pt"/>
           <fo:block margin="1pt 2pt 3pt">three values</fo:block>
+          <fo:block border-before-style="solid" border-before-width="1pt"/>
           <fo:block>EOF</fo:block>
         </fo:flow>
       </fo:page-sequence>
   <checks>
     <!-- *** all *** -->
     <!--     space before block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[2]/@space-before"/>
     <!--     actual block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-start"/>
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-end"/>
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bap"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpda"/>
+    <eval expected="5000" xpath="//flow/block[2]/@space-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/@space-end"/>
+    <eval expected="0 0 0 0" xpath="//flow/block[2]/@bap"/>
+    <eval expected="350000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[2]/@bpd"/>
+    <eval expected="24400" xpath="//flow/block[2]/@bpda"/>
     <!--     space after block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[2]/@space-after"/>
     
     <!-- *** left/right *** -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@space-start"/>
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@space-end"/>
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bap"/>
-    <eval expected="350000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bpda"/>
+    <eval expected="5000" xpath="//flow/block[4]/@space-start"/>
+    <eval expected="5000" xpath="//flow/block[4]/@space-end"/>
+    <eval expected="0 0 0 0" xpath="//flow/block[4]/@bap"/>
+    <eval expected="350000" xpath="//flow/block[4]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[4]/@bpda"/>
     
     <!-- *** top/bottom *** -->
     <!--     space before block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[6]/@space-before"/>
     <!--     actual block -->
-    <true xpath="not(/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@space-start)"/>
-    <true xpath="not(/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@space-end)"/>
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bap"/>
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bpda"/>
+    <true xpath="not(//flow/block[6]/@space-start)"/>
+    <true xpath="not(//flow/block[6]/@space-end)"/>
+    <eval expected="0 0 0 0" xpath="//flow/block[6]/@bap"/>
+    <eval expected="360000" xpath="//flow/block[6]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[6]/@bpd"/>
+    <eval expected="24400" xpath="//flow/block[6]/@bpda"/>
     <!--     space after block -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[6]/@space-after"/>
     
     <!-- *** three values *** -->
     <!--     space before block -->
-    <eval expected="1000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[8]/@bpd"/>
+    <eval expected="1000" xpath="//flow/block[8]/@space-before"/>
     <!--     actual block -->
-    <eval expected="2000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[9]/@space-start"/>
-    <eval expected="2000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[9]/@space-end"/>
-    <eval expected="0 0 0 0" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[9]/@bap"/>
-    <eval expected="356000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[9]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[9]/@bpda"/>
+    <eval expected="2000" xpath="//flow/block[8]/@space-start"/>
+    <eval expected="2000" xpath="//flow/block[8]/@space-end"/>
+    <eval expected="0 0 0 0" xpath="//flow/block[8]/@bap"/>
+    <eval expected="356000" xpath="//flow/block[8]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[8]/@bpd"/>
+    <eval expected="18400" xpath="//flow/block[8]/@bpda"/>
     <!--     space after block -->
-    <eval expected="3000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[10]/@bpd"/>
+    <eval expected="3000" xpath="//flow/block[8]/@space-after"/>
   </checks>
 </testcase>
index 73b430aa64dab803577d0f4d90f1a553b79539d1..e64750785da7a7e18777f4e21c4c124c930f9d75 100644 (file)
   </fo>\r
   <checks>\r
     <element-list category="breaker">\r
-      <box w="30000"/>\r
+      <box w="0"/>\r
+      <penalty w="0" p="INF"/>\r
+      <glue w="30000" aux="true"/>\r
+      \r
       <box w="14400"/>\r
-      <penalty w="30000" p="0"/> <!-- w="30000" is for the padding-after -->\r
-      <glue w="-30000" aux="true"/> <!-- get's discarded if a break happens on the penalty above -->\r
+      \r
+      <glue w="30000" aux="true"/> <!-- w="30000" is for the padding-after -->\r
+      <penalty w="0" p="0"/>\r
+      <glue w="-60000" aux="true"/> <!-- difference between break and no-break situation -->\r
       <box w="0"/>\r
       <penalty w="0" p="INF"/>\r
       <glue w="30000" aux="true"/> <!-- w="30000" is for the padding-before -->\r
+      \r
       <box w="14400"/>\r
-      <penalty w="30000" p="0"/>\r
-      <glue w="-30000" aux="true"/>\r
+      \r
+      <glue w="30000" aux="true"/>\r
+      <penalty w="0" p="0"/>\r
+      <glue w="-60000" aux="true"/>\r
       <box w="0"/>\r
       <penalty w="0" p="INF"/>\r
       <glue w="30000" aux="true"/>\r
+      \r
       <box w="14400"/>\r
-      <penalty w="30000" p="0"/>\r
-      <glue w="-30000" aux="true"/>\r
+\r
+      <glue w="30000" aux="true"/>\r
+      <penalty w="0" p="0"/>\r
+      <glue w="-60000" aux="true"/>\r
       <box w="0"/>\r
       <penalty w="0" p="INF"/>\r
       <glue w="30000" aux="true"/>\r
+      \r
       <box w="14400"/>\r
-      <penalty w="30000" p="0"/>\r
-      <glue w="-30000" aux="true"/>\r
+\r
+      <glue w="30000" aux="true"/>\r
+      <penalty w="0" p="0"/>\r
+      <glue w="-60000" aux="true"/>\r
       <box w="0"/>\r
       <penalty w="0" p="INF"/>\r
       <glue w="30000" aux="true"/>\r
+      \r
       <box w="14400"/>\r
-      <penalty w="30000" p="0"/>\r
-      <glue w="-30000" aux="true"/>\r
+\r
+      <glue w="30000" aux="true"/>\r
+      <penalty w="0" p="0"/>\r
+      <glue w="-60000" aux="true"/>\r
       <box w="0"/>\r
       <penalty w="0" p="INF"/>\r
       <glue w="30000" aux="true"/>\r
+      \r
       <box w="14400"/>\r
-      <box w="30000"/>\r
+      \r
+      <box w="0"/>\r
+      <penalty w="0" p="INF"/>\r
+      <glue w="30000" aux="true"/>\r
+      \r
       <skip>3</skip>\r
     </element-list>\r
   </checks>\r
index 746cf15c965caa4f4184efce0f1e03dd056099ce..9c462b29cb17caf6a299e6c4e3658e81aa00b1d7 100644 (file)
   </fo>
   <checks>
     <!-- overlapping block1 -->
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpda"/>
+    <eval expected="360000" xpath="//flow/block[1]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[1]/@bpd"/>
+    <eval expected="6400" xpath="//flow/block[1]/@bpda"/>
     <!-- space after overlapping block1 -->
-    <eval expected="-8000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpd"/>
+    <eval expected="-8000" xpath="//flow/block[1]/@space-after"/>
     <!-- normal block1 -->
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[3]/@bpda"/>
+    <eval expected="360000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[2]/@bpda"/>
     <!-- space before spaced block1 -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[4]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[3]/@space-before"/>
     <!-- spaced block1 -->
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[5]/@bpda"/>
+    <eval expected="360000" xpath="//flow/block[3]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[3]/@bpd"/>
+    <eval expected="19400" xpath="//flow/block[3]/@bpda"/>
     <!-- spaced block2 -->
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[6]/@bpda"/>
+    <eval expected="360000" xpath="//flow/block[4]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[4]/@bpd"/>
+    <eval expected="19400" xpath="//flow/block[4]/@bpda"/>
     <!-- space after spaced block2 -->
-    <eval expected="5000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[7]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[4]/@space-after"/>
     <!-- normal block2 -->
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[8]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[8]/@bpda"/>
+    <eval expected="360000" xpath="//flow/block[5]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[5]/@bpda"/>
     <!-- space before overlapping block2 -->
-    <eval expected="-8000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[9]/@bpd"/>
+    <eval expected="-8000" xpath="//flow/block[6]/@space-before"/>
     <!-- overlapping block2 -->
-    <eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[10]/@ipda"/>
-    <eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[10]/@bpda"/>
+    <eval expected="360000" xpath="//flow/block[6]/@ipda"/>
+    <eval expected="14400" xpath="//flow/block[6]/@bpd"/>
+    <eval expected="6400" xpath="//flow/block[6]/@bpda"/>
   </checks>
 </testcase>
index 58b5a3e6f487f0be2baed71a8eb767478edf902b..0676277f9a7150d2357dea23ad80e18ea93fd83b 100644 (file)
@@ -28,7 +28,7 @@
           <fo:region-body/>
         </fo:simple-page-master>
       </fo:layout-master-set>
-      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+      <fo:page-sequence master-reference="normal" id="retain">
         <fo:flow flow-name="xsl-region-body">
           <fo:block space-before.optimum="20pt" space-before.conditionality="retain" space-after.optimum="10pt" space-after.conditionality="retain" text-align="justify">
 In olden times when wishing still helped one, there lived a king whose daughters 
@@ -44,7 +44,7 @@ Two blocks, testing conditionality="retain".
           </fo:block>
         </fo:flow>
       </fo:page-sequence>
-      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+      <fo:page-sequence master-reference="normal" id="discard">
         <fo:flow flow-name="xsl-region-body">
           <fo:block space-before.optimum="20pt" space-before.conditionality="discard" space-after.optimum="10pt" space-after.conditionality="discard" text-align="justify">
 In olden times when wishing still helped one, there lived a king whose daughters 
@@ -63,5 +63,94 @@ Two blocks, testing conditionality="discard".
     </fo:root>
   </fo>
   <checks>
+    <element-list category="breaker" id="retain">
+      <box w="0"/> <!-- Helper box bearing the SpaceHandlingPosition and making sure the glue gets processed -->
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000" y="0" z="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000" y="0" z="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000" y="0" z="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000" y="0" z="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      
+      <!-- skip three more lines -->
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000" y="0" z="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000" y="0" z="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000" y="0" z="20000"/>
+      
+      <box w="14400"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="10000" aux="true"/>
+      <penalty w="0" p="0"/>
+      <glue w="-10000" aux="true"/>
+      
+      <box w="0" aux="true"/>
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="10000" aux="true"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0" aux="true"/>
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="20000" aux="true"/>
+      
+      <box w="0" aux="true"/> <!-- This is used to make sure the preceding glue is not cut off -->
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="discard">
+      <box w="0"/> <!-- Helper box used to notify the LM for the addAreas stage about the discarded spaces -->
+      <box w="14400"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <glue w="10000"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0"/> <!-- SpaceHandlingPosition-bearing helper box -->
+      
+      <skip>3</skip>
+    </element-list>
   </checks>
 </testcase>
index a58c831a3b7809ae6b22651fb624bc072302f0ad..0c59ec68fc490f819ca8aa6cddee9b82ed465f32 100644 (file)
@@ -46,7 +46,7 @@
     <element-list category="breaker">\r
       <box w="0"/>\r
       <penalty w="0" p="INF"/>\r
-      <glue w="5000" aux="true"/>\r
+      <glue w="5000"/>\r
       <box w="14400"/>\r
       <box w="14400"/>\r
       <skip>3</skip>\r
diff --git a/test/layoutengine/testcases/block_space-before_space-after_4.xml b/test/layoutengine/testcases/block_space-before_space-after_4.xml
new file mode 100644 (file)
index 0000000..3d4fb9f
--- /dev/null
@@ -0,0 +1,83 @@
+<?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 block-level space properties. Demonstrates that spaces are repeated on every generated area.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="30pt">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:flow flow-name="xsl-region-body" line-height="10pt" font-size="9pt">
+          <fo:block space-before="5pt" space-before.conditionality="retain" background-color="yellow">
+             <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>line 5</fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker">
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+
+      <!-- skip two more lines -->
+      <skip>6</skip>
+      <skip>6</skip>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <eval expected="3" xpath="count(//pageViewport)"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="2" xpath="count(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block)"/>
+    <eval expected="2" xpath="count(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block)"/>
+    
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block_space-before_space-after_5.xml b/test/layoutengine/testcases/block_space-before_space-after_5.xml
new file mode 100644 (file)
index 0000000..5a7beac
--- /dev/null
@@ -0,0 +1,96 @@
+<?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 block-level space properties. These here are the 
+      <a href="http://wiki.apache.org/xmlgraphics-fop/SpaceResolution/Examples">examples 3 to 5 on the Wiki</a>.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1in">
+          <fo:region-body background-color="lightgray"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="cond-cond">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="11pt">block 1: space-after conditional</fo:block>
+          <fo:block space-before="12pt">block 2: space-before conditional</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="retain-cond">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="11pt" space-after.conditionality="retain">block 1: space-after retained</fo:block>
+          <fo:block space-before="12pt">block 2: space-before: conditional</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="retain-cond-2">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt" space-after.conditionality="retain">block 1: space-after retained</fo:block>
+          <fo:block space-before="10pt">block 2: space-before: conditional</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="retain-retain">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="11pt" space-after.conditionality="retain">block 1: space-after retained</fo:block>
+          <fo:block space-before="12pt" space-before.conditionality="retain">block 2: space-before retained</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="cond-cond">
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <glue w="12000"/>
+      <box w="14400"/>
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="retain-cond">
+      <box w="14400"/>
+      <penalty w="0" p="INF"/>
+      <glue w="11000"/>
+      <penalty w="0" p="0"/>
+      <glue w="1000"/>
+      <box w="14400"/>
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="retain-cond-2">
+      <box w="14400"/>
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="retain-retain">
+      <box w="14400"/>
+      <penalty w="0" p="INF"/>
+      <glue w="11000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-11000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="12000"/>
+      <box w="14400"/>
+      <skip>3</skip>
+    </element-list>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block_space-before_space-after_6.xml b/test/layoutengine/testcases/block_space-before_space-after_6.xml
new file mode 100644 (file)
index 0000000..7b67372
--- /dev/null
@@ -0,0 +1,92 @@
+<?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 block-level space properties. These here are the 
+      <a href="http://wiki.apache.org/xmlgraphics-fop/SpaceResolution/Examples">examples 1 and 2 on the Wiki</a>.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1in">
+          <fo:region-body background-color="lightgray"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="ex1">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block>first line</fo:block>
+          <fo:block space-before="10pt">
+            <fo:block>before break</fo:block>
+            <fo:block>after break</fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="ex2">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block>first line</fo:block>
+          <fo:block space-before="10pt" space-before.conditionality="retain">
+            <fo:block>before break</fo:block>
+            <fo:block>after break</fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="ex1">
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="10000"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <box w="14400"/>
+      
+      <skip>3</skip>
+    </element-list>
+    
+    <element-list category="breaker" id="ex2">
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      
+      <box w="14400"/>
+
+      <penalty w="0" p="0"/>
+
+      <glue w="-10000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+
+      <box w="14400"/>
+      
+      <skip>3</skip>
+    </element-list>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block_space-before_space-after_7.xml b/test/layoutengine/testcases/block_space-before_space-after_7.xml
new file mode 100644 (file)
index 0000000..4387626
--- /dev/null
@@ -0,0 +1,56 @@
+<?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 block-level space properties. These here are the 
+      <a href="http://wiki.apache.org/xmlgraphics-fop/SpaceResolution/Examples">examples 1 and 2 on the Wiki</a>.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1in">
+          <fo:region-body background-color="lightgray"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="ex8">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-before="10pt" padding-before="5pt" border-before-style="solid" border-before-width="2pt">
+            first line
+            <fo:block space-before="6pt">second line</fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="ex8">
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="7000"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="6000"/>
+      <box w="14400"/>
+      <skip>3</skip>
+    </element-list>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block_space-before_space-after_8.xml b/test/layoutengine/testcases/block_space-before_space-after_8.xml
new file mode 100644 (file)
index 0000000..6a96007
--- /dev/null
@@ -0,0 +1,49 @@
+<?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 if the special case is properly handled when an empty block is between two 
+      space-specifiers which should form a stacking constraint.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="ex8">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-after="10pt">
+            first line
+          </fo:block>
+          <fo:block id="empty-block"/>
+          <fo:block space-before="10pt">
+            second line
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <true xpath="not(boolean(//flow/block[1]/@space-after))"/>
+    <eval expected="10000" xpath="//flow/block[2]/@space-before"/>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block_space-before_space-after_9.xml b/test/layoutengine/testcases/block_space-before_space-after_9.xml
new file mode 100644 (file)
index 0000000..4df4591
--- /dev/null
@@ -0,0 +1,69 @@
+<?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 if the isLast case is properly handled. In this case the part list has to be 
+      reversed to do the conditionals removal, but then has to be reversed again to its natural order 
+      so space resolution rules 2 and 3 are properly performed.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-before="11pt" space-after="11pt">
+            <fo:block space-before="12pt" space-after="12pt">
+              <fo:block space-before="13pt" space-after="13pt" border="solid 1pt">
+                Apache FOP!
+              </fo:block>
+            </fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker">
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="1000"/>
+      
+      <box w="14400"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="1000"/>
+      
+      <box w="0"/>
+      <skip>3</skip>
+    </element-list>
+    <true xpath="not(boolean(//flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/@space-after))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/@space-after))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/block[1]/@space-after))"/>
+    <eval expected="1000 1000 1000 1000" xpath="//flow/block[1]/block[1]/block[1]/@bap"/>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/block_space-before_space-after_9a.xml b/test/layoutengine/testcases/block_space-before_space-after_9a.xml
new file mode 100644 (file)
index 0000000..07f3783
--- /dev/null
@@ -0,0 +1,90 @@
+<?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 if the isLast case is properly handled. In this case the part list has to be 
+      reversed to do the conditionals removal, but then has to be reversed again to its natural order 
+      so space resolution rules 2 and 3 are properly performed.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block space-before="11pt" space-after="11pt">
+            <fo:block space-before="12pt" space-after="12pt">
+              <fo:block space-before="13pt" space-after="13pt" border="solid 1pt">
+                Apache FOP!
+                <fo:block break-before="page"/>
+                Apache FOP!!!
+              </fo:block>
+            </fo:block>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" index="0">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      <penalty w="0" p="INF"/>
+      <glue w="1000"/>
+      
+      <box w="14400"/>
+      
+      <skip>3</skip> <!-- the last of the three holds a SpaceHandlingBreakPosition -->
+    </element-list>
+    <element-list category="breaker" index="1">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      
+      <box w="0"/> <!-- empty block used to cause the break-before -->
+      <penalty w="0" p="0"/>
+      
+      <box w="14400"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="1000"/>
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+
+      <skip>3</skip>
+    </element-list>
+    
+    <true xpath="not(boolean(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@space-after))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block[1]/@space-after))"/>
+    <eval expected="1000 1000 1000 0" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block[1]/@bap"/>
+
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@space-after))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block[1]/@space-after))"/>
+    <eval expected="1000 1000 0 1000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block[1]/@bap"/>
+  </checks>
+</testcase>
index a5c6f6f7abcde90aa61cf6a8bd3c599f6126b8f2..02c72b118f41efe8950aa823057d9acc5b6971a7 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="7180" xpath="//flow/block[1]/lineArea/char/@baseline"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea/char/@offset"/>
+    <eval expected="5560" xpath="//flow/block[1]/lineArea/char/@ipd"/>
+    <eval expected="7560" xpath="//flow/block[1]/lineArea/char/@ipda"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/char/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/char/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/char/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/char/@border-start"/>
+
     <eval expected="7180" xpath="//flow/block[2]/lineArea/char/@baseline"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea/char/@offset"/>
     <eval expected="5560" xpath="//flow/block[2]/lineArea/char/@ipd"/>
-    <eval expected="7560" xpath="//flow/block[2]/lineArea/char/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/char/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/char/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/char/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/char/@border-start"/>
-
-    <eval expected="7180" xpath="//flow/block[5]/lineArea/char/@baseline"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea/char/@offset"/>
-    <eval expected="5560" xpath="//flow/block[5]/lineArea/char/@ipd"/>
-    <eval expected="25560" xpath="//flow/block[5]/lineArea/char/@ipda"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/char/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/char/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/char/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/char/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/char/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/char/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/char/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/char/@padding-start"/>
+    <eval expected="25560" xpath="//flow/block[2]/lineArea/char/@ipda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/char/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/char/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/char/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/char/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/char/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/char/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/char/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/char/@padding-start"/>
 
-    <eval expected="7180" xpath="//flow/block[8]/lineArea/char/@baseline"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea/char/@offset"/>
-    <eval expected="5000" xpath="//flow/block[8]/lineArea/char/@ipd"/>
-    <eval expected="17000" xpath="//flow/block[8]/lineArea/char/@ipda"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[8]/lineArea/char/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea/char/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[8]/lineArea/char/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[8]/lineArea/char/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea/char/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea/char/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea/char/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[8]/lineArea/char/@padding-start"/>
+    <eval expected="7180" xpath="//flow/block[3]/lineArea/char/@baseline"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea/char/@offset"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea/char/@ipd"/>
+    <eval expected="17000" xpath="//flow/block[3]/lineArea/char/@ipda"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[3]/lineArea/char/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea/char/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[3]/lineArea/char/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[3]/lineArea/char/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea/char/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea/char/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[3]/lineArea/char/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[3]/lineArea/char/@padding-start"/>
 
-    <eval expected="5744" xpath="//flow/block[11]/lineArea/char/@baseline"/>
-    <eval expected="8616" xpath="//flow/block[11]/lineArea/char/@offset"/>
-    <eval expected="4448" xpath="//flow/block[11]/lineArea/char/@ipd"/>
-    <eval expected="24448" xpath="//flow/block[11]/lineArea/char/@ipda"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/char/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/char/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/char/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/char/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/char/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/char/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/char/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/char/@padding-start"/>
+    <eval expected="5744" xpath="//flow/block[4]/lineArea/char/@baseline"/>
+    <eval expected="8616" xpath="//flow/block[4]/lineArea/char/@offset"/>
+    <eval expected="4448" xpath="//flow/block[4]/lineArea/char/@ipd"/>
+    <eval expected="24448" xpath="//flow/block[4]/lineArea/char/@ipda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/char/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/char/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/char/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/char/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/char/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/char/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/char/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/char/@padding-start"/>
   </checks>
 </testcase>
index 60f15505e14c1d75606a55a1325391689d861d20..125d56fb0f83ab4d23e92bc27669458b516cd70e 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="7180" xpath="//flow/block[1]/lineArea/char/@offset"/>
     <eval expected="7180" xpath="//flow/block[2]/lineArea/char/@offset"/>
-    <eval expected="7180" xpath="//flow/block[5]/lineArea/char/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea/char/@offset"/>
-    <eval expected="4565" xpath="//flow/block[11]/lineArea/char/@offset"/>
-    <eval expected="9250" xpath="//flow/block[14]/lineArea/char/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea/char/@offset"/>
+    <eval expected="4565" xpath="//flow/block[4]/lineArea/char/@offset"/>
+    <eval expected="9250" xpath="//flow/block[5]/lineArea/char/@offset"/>
   </checks>
 </testcase>
diff --git a/test/layoutengine/testcases/footnote_space-resolution.xml b/test/layoutengine/testcases/footnote_space-resolution.xml
new file mode 100644 (file)
index 0000000..151e276
--- /dev/null
@@ -0,0 +1,58 @@
+<?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 space-resolution inside the footnotes area.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="3in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block>region-body<fo:footnote>
+              <fo:inline font-size="50%" vertical-align="super">1</fo:inline>
+              <fo:footnote-body>
+                <fo:block space-before="1em" space-after="1em">
+                  <fo:inline font-size="50%" vertical-align="super">1</fo:inline>I'm a footnote!</fo:block>
+              </fo:footnote-body>
+            </fo:footnote>
+            blah<fo:footnote>
+              <fo:inline font-size="50%" vertical-align="super">2</fo:inline>
+              <fo:footnote-body>
+                <fo:block space-before="1em" space-after="1em">
+                  <fo:inline font-size="50%" vertical-align="super">2</fo:inline>I'm a footnote!</fo:block>
+              </fo:footnote-body>
+            </fo:footnote>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <true xpath="not(boolean(//footnotes/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//footnotes/block[1]/@space-after))"/>
+    <eval expected="12000" xpath="//footnotes/block[2]/@space-before"/>
+    <true xpath="not(boolean(//footnotes/block[2]/@space-after))"/>
+  </checks>
+</testcase>
index ac6a6233f5cd82328d93d3977fa4711a6495f14a..1ad390a53165d614acccaced785f698c3d2dbd9e 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="10052" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="2872" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="10052" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="10052" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="5427" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="5487" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="802" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="802" xpath="//flow/block[9]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="802" xpath="//flow/block[10]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="8616" xpath="//flow/block[12]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="6462" xpath="//flow/block[13]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="10052" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="5427" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="5487" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="802" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="802" xpath="//flow/block[26]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="802" xpath="//flow/block[29]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[32]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="8616" xpath="//flow/block[35]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="6462" xpath="//flow/block[38]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="10052" xpath="//flow/block[41]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="802" xpath="//flow/block[44]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="10052" xpath="//flow/block[47]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="802" xpath="//flow/block[50]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="802" xpath="//flow/block[15]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="10052" xpath="//flow/block[16]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="802" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
   </checks>
 </testcase>
index fd21545b2362fa6a72f8a9641bbd5d1862bfdc49..d8d766e50498d253fcd6bdbaf02d0b45198daf3d 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="12950" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[1]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[1]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+    
     <eval expected="12950" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="1925" xpath="//flow/block[2]/lineArea[1]/@space-before"/>
     <eval expected="1925" xpath="//flow/block[2]/lineArea[1]/@space-after"/>
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="12950" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="13078" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[8]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[8]/lineArea[1]/@space-after"/>
-    <eval expected="128" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="128" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="13078" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[3]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[3]/lineArea[1]/@space-after"/>
+    <eval expected="128" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="128" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="15122" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[11]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[11]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5872" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="15122" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[4]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[4]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5872" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="13678" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[14]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[14]/lineArea[1]/@space-after"/>
-    <eval expected="728" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="728" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="13678" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-after"/>
+    <eval expected="728" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="728" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="15722" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[17]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[17]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="6472" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="15722" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[6]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[6]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="6472" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 128fd6b001c94083b1b5a38719584c60e81ceafc..9b514c7f4b558156a05bf6e7917c4da502146f82 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="2872" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="1850" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="1826" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="3700" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="3700" xpath="//flow/block[9]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="3700" xpath="//flow/block[10]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="574" xpath="//flow/block[12]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="1436" xpath="//flow/block[13]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="1850" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="1826" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3700" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3700" xpath="//flow/block[26]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3700" xpath="//flow/block[29]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[32]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="574" xpath="//flow/block[35]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="1436" xpath="//flow/block[38]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[41]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3700" xpath="//flow/block[44]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[47]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3700" xpath="//flow/block[50]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="3700" xpath="//flow/block[15]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[16]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="3700" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
   </checks>
 </testcase>
index f5559f4359bf53d971297ad5e8260cb546b37598..591ee2c9b7b8b89b3a512f7bb452f95ae96b243e 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="2872" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="1850" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="1850" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="1850" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="1850" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="1826" xpath="//flow/block[20]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="1826" xpath="//flow/block[20]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="1826" xpath="//flow/block[7]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="1826" xpath="//flow/block[7]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="3700" xpath="//flow/block[26]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[26]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[9]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[9]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="3700" xpath="//flow/block[29]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[29]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[10]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[10]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="2872" xpath="//flow/block[32]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[32]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="574" xpath="//flow/block[35]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="574" xpath="//flow/block[35]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="574" xpath="//flow/block[12]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="574" xpath="//flow/block[12]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="1436" xpath="//flow/block[38]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="1436" xpath="//flow/block[38]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="1436" xpath="//flow/block[13]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="1436" xpath="//flow/block[13]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="0" xpath="//flow/block[41]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[41]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="0" xpath="//flow/block[44]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[44]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[15]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[15]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="0" xpath="//flow/block[47]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[47]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[16]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[16]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="3700" xpath="//flow/block[50]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[50]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 77cc0716778abaf2af77385a9bc41483a734d87b..3d32b3595f7a2d6b5a9aaf2c0c0c77e5b4142c97 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/inlineparent[2]/@offset"/>
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[8]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="1436" xpath="//flow/block[14]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="2361" xpath="//flow/block[17]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="2349" xpath="//flow/block[20]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[23]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="3286" xpath="//flow/block[26]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="3286" xpath="//flow/block[29]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[32]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="1723" xpath="//flow/block[35]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="2154" xpath="//flow/block[38]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[41]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[44]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="1436" xpath="//flow/block[47]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="3286" xpath="//flow/block[50]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[3]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="1436" xpath="//flow/block[5]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="2361" xpath="//flow/block[6]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="2349" xpath="//flow/block[7]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[8]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="3286" xpath="//flow/block[9]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="3286" xpath="//flow/block[10]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="1723" xpath="//flow/block[12]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="2154" xpath="//flow/block[13]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[15]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="1436" xpath="//flow/block[16]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="3286" xpath="//flow/block[17]/lineArea[1]/inlineparent[2]/@offset"/>
   </checks>
 </testcase>
index 794c81e5a2a4de93ce1b866ebc42a4e66be09050..4268c123906bd4f49c1ac448ee667ea0b8488226 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="22200" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="8616" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-4308" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+
     <eval expected="22200" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
     <eval expected="8616" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/text[2]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
 
+    <eval expected="22200" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="1723" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="6494" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
+
+    <eval expected="22200" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="1723" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="2739" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
+
     <eval expected="22200" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="8616" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-4308" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="5550" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[2]/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="22200" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="1723" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="6494" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="22200" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="1723" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="2739" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="22200" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="5550" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="27750" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="5550" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5550" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-5550" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="5550" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="27750" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="5550" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5550" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-5550" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="5550" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="22200" xpath="//flow/block[7]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="8325" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-8325" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="4308" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="22200" xpath="//flow/block[20]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="8325" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-8325" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="4308" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="22491" xpath="//flow/block[23]/lineArea[1]/@bpd"/>
-    <eval expected="291" xpath="//flow/block[23]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="8616" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="-8616" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/text[2]/@offset"/>
-    <eval expected="291" xpath="//flow/block[23]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="22491" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
+    <eval expected="291" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="8616" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="-8616" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/text[2]/@offset"/>
+    <eval expected="291" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="22200" xpath="//flow/block[26]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="8325" xpath="//flow/block[26]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="-6462" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="22200" xpath="//flow/block[9]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="8325" xpath="//flow/block[9]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="-6462" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="27750" xpath="//flow/block[29]/lineArea[1]/@bpd"/>
-    <eval expected="5550" xpath="//flow/block[29]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-5550" xpath="//flow/block[29]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="5550" xpath="//flow/block[29]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="27750" xpath="//flow/block[10]/lineArea[1]/@bpd"/>
+    <eval expected="5550" xpath="//flow/block[10]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-5550" xpath="//flow/block[10]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="5550" xpath="//flow/block[10]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 7b5fcdb03c4deeeec9e3ca04312de4f130d9f0d0..ee56f58ed99987153463ae46ab753e60de4d67c8 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="90040" xpath="//flow/block[1]/lineArea/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[1]/lineArea/inlineparent/@background"/>
+
     <eval expected="90040" xpath="//flow/block[2]/lineArea/inlineparent/@ipd"/>
     <eval expected="color=#ffff00" xpath="//flow/block[2]/lineArea/inlineparent/@background"/>
 
-    <eval expected="90040" xpath="//flow/block[5]/lineArea/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[5]/lineArea/inlineparent/@background"/>
-
-    <eval expected="90040" xpath="//flow/block[8]/lineArea/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[8]/lineArea/inlineparent/@background"/>
+    <eval expected="90040" xpath="//flow/block[3]/lineArea/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[3]/lineArea/inlineparent/@background"/>
 
-    <eval expected="90040" xpath="//flow/block[11]/lineArea/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[11]/lineArea/inlineparent/@background"/>
+    <eval expected="90040" xpath="//flow/block[4]/lineArea/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[4]/lineArea/inlineparent/@background"/>
 
-    <eval expected="188950" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[14]/lineArea[1]/inlineparent/@background"/>
-    <eval expected="313470" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[14]/lineArea[2]/inlineparent/@background"/>
-    <eval expected="145610" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[14]/lineArea[3]/inlineparent/@background"/>
+    <eval expected="188950" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[5]/lineArea[1]/inlineparent/@background"/>
+    <eval expected="313470" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[5]/lineArea[2]/inlineparent/@background"/>
+    <eval expected="145610" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[5]/lineArea[3]/inlineparent/@background"/>
 
-    <eval expected="188950" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[17]/lineArea[1]/inlineparent/@background"/>
-    <eval expected="313470" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[17]/lineArea[2]/inlineparent/@background"/>
-    <eval expected="109650" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[17]/lineArea[3]/inlineparent/@background"/>
+    <eval expected="188950" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[6]/lineArea[1]/inlineparent/@background"/>
+    <eval expected="313470" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[6]/lineArea[2]/inlineparent/@background"/>
+    <eval expected="109650" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[6]/lineArea[3]/inlineparent/@background"/>
 
-    <eval expected="199793" xpath="//flow/block[20]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[20]/lineArea[1]/inlineparent/@background"/>
-    <eval expected="350000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[20]/lineArea[2]/inlineparent/@background"/>
-    <eval expected="118530" xpath="//flow/block[20]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[20]/lineArea[3]/inlineparent/@background"/>
+    <eval expected="199793" xpath="//flow/block[7]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[7]/lineArea[1]/inlineparent/@background"/>
+    <eval expected="350000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[7]/lineArea[2]/inlineparent/@background"/>
+    <eval expected="118530" xpath="//flow/block[7]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[7]/lineArea[3]/inlineparent/@background"/>
 
-    <eval expected="128370" xpath="//flow/block[23]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[23]/lineArea[1]/inlineparent/@background"/>
-    <eval expected="269560" xpath="//flow/block[23]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[23]/lineArea[2]/inlineparent/@background"/>
-    <eval expected="225250" xpath="//flow/block[23]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[23]/lineArea[3]/inlineparent/@background"/>
+    <eval expected="128370" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[8]/lineArea[1]/inlineparent/@background"/>
+    <eval expected="269560" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[8]/lineArea[2]/inlineparent/@background"/>
+    <eval expected="225250" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[8]/lineArea[3]/inlineparent/@background"/>
 
-    <eval expected="151184" xpath="//flow/block[26]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[26]/lineArea[1]/inlineparent/@background"/>
-    <eval expected="81704" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/@ipd"/>
-    <eval expected="161644" xpath="//flow/block[26]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="color=#ffff00" xpath="//flow/block[26]/lineArea[2]/inlineparent/@background"/>
-    <eval expected="67704" xpath="//flow/block[26]/lineArea[2]/inlineparent/inlineparent/@ipd"/>
+    <eval expected="151184" xpath="//flow/block[9]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[9]/lineArea[1]/inlineparent/@background"/>
+    <eval expected="81704" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/@ipd"/>
+    <eval expected="161644" xpath="//flow/block[9]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[9]/lineArea[2]/inlineparent/@background"/>
+    <eval expected="67704" xpath="//flow/block[9]/lineArea[2]/inlineparent/inlineparent/@ipd"/>
   </checks>
 </testcase>
index 723abfc9d912e3d7b1dad8e47bacec1eaa29c2e9..591e337565d5e2559d966bdf584c25e63e0fae78 100755 (executable)
     </fo:root>
   </fo>
   <checks>
-    <eval expected="12950" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
+    <eval expected="12950" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[1]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[1]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="14737" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="1925" xpath="//flow/block[2]/lineArea[1]/@space-before"/>
     <eval expected="1925" xpath="//flow/block[2]/lineArea[1]/@space-after"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="5487" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="14737" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
+    <eval expected="17400" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[3]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[3]/lineArea[1]/@space-after"/>
+    <eval expected="4450" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="4450" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="12950" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[4]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[4]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="12950" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
     <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-before"/>
     <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-after"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5487" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="17400" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
+    <eval expected="13078" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[6]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[6]/lineArea[1]/@space-after"/>
+    <eval expected="128" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="128" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="15122" xpath="//flow/block[7]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[7]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[7]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5872" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="15118" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
     <eval expected="1925" xpath="//flow/block[8]/lineArea[1]/@space-before"/>
     <eval expected="1925" xpath="//flow/block[8]/lineArea[1]/@space-after"/>
-    <eval expected="4450" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2168" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="4450" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="12950" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[11]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[11]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="12950" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[14]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[14]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="13078" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[17]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[17]/lineArea[1]/@space-after"/>
-    <eval expected="128" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="128" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="15122" xpath="//flow/block[20]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[20]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[20]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5872" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="15118" xpath="//flow/block[23]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[23]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[23]/lineArea[1]/@space-after"/>
-    <eval expected="2168" xpath="//flow/block[23]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2168" xpath="//flow/block[23]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="2168" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="17162" xpath="//flow/block[26]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[26]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[26]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="7912" xpath="//flow/block[26]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="17162" xpath="//flow/block[9]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[9]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[9]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="7912" xpath="//flow/block[9]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 6bc6d60bc2416841f7007db820e27f6fc1418f0c..5e7b276b723a444b2195420a5c712e630318b4c1 100755 (executable)
     </fo:root>
   </fo>
   <checks>
-    <eval expected="16415" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
+    <eval expected="16415" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5487" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="3528" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="14737" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
     <eval expected="5487" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="3528" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="-3794" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/text[2]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="14737" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5487" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="21194" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="8244" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3794" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-3794" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="8244" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="17400" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="4450" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="3528" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="4450" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="15118" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
+    <eval expected="2168" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-3794" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="7436" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="21194" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
-    <eval expected="8244" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3794" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-3794" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="8244" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="2168" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="17400" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="4450" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="3528" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="4450" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="15118" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="2168" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="7436" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="2168" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="39060" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="25086" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="14892" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="1968" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="-16860" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="25086" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="39060" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="25086" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="14892" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="1968" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="-16860" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="25086" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
+
index eee8906b785e452ca972e27809bf55006c82ec1a..10f745a180577c1b57f8dde185367b4537d54fce 100755 (executable)
     </fo:root>
   </fo>
   <checks>
-    <eval expected="14846" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
+    <eval expected="14846" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="1826" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="5620" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="12950" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
     <eval expected="1826" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="5620" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="-1702" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/text[2]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
+
+    <eval expected="12950" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-1750" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="13400" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="6000" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
     
     <eval expected="12950" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
     <eval expected="1826" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-1702" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="3528" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[2]/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
+    
+    <eval expected="14918" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="1968" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3794" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-3794" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="1968" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="12950" xpath="//flow/block[7]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-2992" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[2]/@offset"/>
+    
+    <eval expected="17708" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-1750" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="10308" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[2]/@offset"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="13400" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="6000" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="12950" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="1826" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="3528" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="14918" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="1968" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3794" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-3794" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="1968" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="12950" xpath="//flow/block[20]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-2992" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="17708" xpath="//flow/block[23]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="10308" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 87055ac0e76c719d6db027b0278ac6859e4085c8..c0ade7fbe611be9012286fec275fb8c0d0619322 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="17100" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="2300" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent[1]/text[1]/@offset"/>
+    <eval expected="6000" xpath="//flow/block[1]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent[2]/text[1]/@offset"/>
+    <eval expected="2300" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+    
     <eval expected="17100" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
-    <eval expected="2300" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="9700" xpath="//flow/block[2]/lineArea[1]/inlineparent[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent[1]/text[1]/@offset"/>
-    <eval expected="6000" xpath="//flow/block[2]/lineArea[1]/inlineparent[2]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[2]/lineArea[1]/inlineparent[2]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent[2]/text[1]/@offset"/>
-    <eval expected="2300" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
-    
-    <eval expected="17100" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="9700" xpath="//flow/block[5]/lineArea[1]/inlineparent[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent[1]/text[1]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[5]/lineArea[1]/inlineparent[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent[2]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="16892" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5792" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="1436" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="16892" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5792" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="1436" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="23168" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="8368" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="3700" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-3700" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="5136" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="8368" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="23168" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="8368" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3700" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-3700" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="5136" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="8368" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="14800" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5792" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-2872" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="14800" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5792" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
     
-    <eval expected="22340" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="7540" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="2872" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-2872" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="5550" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/text[2]/@offset"/>
-    <eval expected="7540" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="22340" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="7540" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="2872" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-2872" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="5550" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/inlineparent/text/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/text[2]/@offset"/>
+    <eval expected="7540" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 08cabc67c4f4eadbc3e961b90e7572917f4e4971..609a0962559210e7be32420e22ba1e18bc170856 100644 (file)
     </fo:root>
   </fo>
   <checks>
-    <eval expected="48350" xpath="//flow/block[2]/lineArea/inlineparent/@ipd"/>
-    <eval expected="50350" xpath="//flow/block[2]/lineArea/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[2]/lineArea/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-start"/>
+    <eval expected="48350" xpath="//flow/block[1]/lineArea/inlineparent/@ipd"/>
+    <eval expected="50350" xpath="//flow/block[1]/lineArea/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/inlineparent/@border-start"/>
     
-    <eval expected="208190" xpath="//flow/block[5]/lineArea/inlineparent/@ipd"/>
-    <eval expected="228190" xpath="//flow/block[5]/lineArea/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/inlineparent/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/inlineparent/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/inlineparent/@padding-start"/>
+    <eval expected="208190" xpath="//flow/block[2]/lineArea/inlineparent/@ipd"/>
+    <eval expected="228190" xpath="//flow/block[2]/lineArea/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[2]/lineArea/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/inlineparent/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/inlineparent/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/inlineparent/@padding-start"/>
     
-    <eval expected="151170" xpath="//flow/block[8]/lineArea/inlineparent/@ipd"/>
-    <eval expected="163170" xpath="//flow/block[8]/lineArea/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[8]/lineArea/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[8]/lineArea/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[8]/lineArea/inlineparent/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea/inlineparent/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[8]/lineArea/inlineparent/@padding-start"/>
+    <eval expected="151170" xpath="//flow/block[3]/lineArea/inlineparent/@ipd"/>
+    <eval expected="163170" xpath="//flow/block[3]/lineArea/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[3]/lineArea/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[3]/lineArea/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[3]/lineArea/inlineparent/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea/inlineparent/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[3]/lineArea/inlineparent/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[3]/lineArea/inlineparent/@padding-start"/>
     
-    <eval expected="64464" xpath="//flow/block[11]/lineArea/inlineparent/@ipd"/>
-    <eval expected="84464" xpath="//flow/block[11]/lineArea/inlineparent/@ipda"/>
-    <eval expected="8616" xpath="//flow/block[11]/lineArea/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-start"/>
+    <eval expected="64464" xpath="//flow/block[4]/lineArea/inlineparent/@ipd"/>
+    <eval expected="84464" xpath="//flow/block[4]/lineArea/inlineparent/@ipda"/>
+    <eval expected="8616" xpath="//flow/block[4]/lineArea/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/inlineparent/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/inlineparent/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/inlineparent/@padding-start"/>
     
-    <eval expected="340710" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="343710" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="2000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-start"/>
-    <eval expected="193840" xpath="//flow/block[14]/lineArea[4]/inlineparent/@ipd"/>
-    <eval expected="196840" xpath="//flow/block[14]/lineArea[4]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[4]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[4]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[4]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[4]/inlineparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[14]/lineArea[4]/inlineparent/@padding-end"/>
+    <eval expected="340710" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="343710" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="2000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-start"/>
+    <eval expected="193840" xpath="//flow/block[5]/lineArea[4]/inlineparent/@ipd"/>
+    <eval expected="196840" xpath="//flow/block[5]/lineArea[4]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[4]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[4]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[4]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[4]/inlineparent/@border-end"/>
+    <eval expected="2000" xpath="//flow/block[5]/lineArea[4]/inlineparent/@padding-end"/>
     
-    <eval expected="118830" xpath="//flow/block[17]/lineArea/inlineparent/@ipd"/>
-    <eval expected="126830" xpath="//flow/block[17]/lineArea/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[17]/lineArea/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[17]/lineArea/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[17]/lineArea/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[17]/lineArea/inlineparent/@border-start"/>
-    <eval expected="2000" xpath="//flow/block[17]/lineArea/inlineparent/@padding-end"/>
-    <eval expected="2000" xpath="//flow/block[17]/lineArea/inlineparent/@padding-start"/>
-    <eval expected="78930" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@ipd"/>
-    <eval expected="84930" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@offset"/>
-    <eval expected="(solid,#008000,1000)" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@border-after"/>
-    <eval expected="(solid,#008000,1000)" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@border-before"/>
-    <eval expected="(solid,#008000,1000)" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@border-end"/>
-    <eval expected="(solid,#008000,1000)" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@border-start"/>
-    <eval expected="2000" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@padding-end"/>
-    <eval expected="2000" xpath="//flow/block[17]/lineArea/inlineparent/inlineparent/@padding-start"/>
+    <eval expected="118830" xpath="//flow/block[6]/lineArea/inlineparent/@ipd"/>
+    <eval expected="126830" xpath="//flow/block[6]/lineArea/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-start"/>
+    <eval expected="2000" xpath="//flow/block[6]/lineArea/inlineparent/@padding-end"/>
+    <eval expected="2000" xpath="//flow/block[6]/lineArea/inlineparent/@padding-start"/>
+    <eval expected="78930" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@ipd"/>
+    <eval expected="84930" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@offset"/>
+    <eval expected="(solid,#008000,1000)" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@border-after"/>
+    <eval expected="(solid,#008000,1000)" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@border-before"/>
+    <eval expected="(solid,#008000,1000)" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@border-end"/>
+    <eval expected="(solid,#008000,1000)" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@border-start"/>
+    <eval expected="2000" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@padding-end"/>
+    <eval expected="2000" xpath="//flow/block[6]/lineArea/inlineparent/inlineparent/@padding-start"/>
   </checks>
 </testcase>
index a3d9e9e4ebac3023f439a4fadb5a044f338044a7..fc26c2b8fee32bf08011b022ed86e7f02dc6cc80 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="347000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@ipda"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@border-start"/>
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@padding-after"/>
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@padding-start"/>
+    <eval expected="46130" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="49130" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-end"/>
+
+    <eval expected="54470" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="57470" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="3000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[1]/inlineparent/@padding-start"/>
     <eval expected="347000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@ipd"/>
     <eval expected="350000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@ipda"/>
-    <eval expected="3000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-start"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-end"/>
     <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-after"/>
     <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-start"/>
-    <eval expected="46130" xpath="//flow/block[2]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="49130" xpath="//flow/block[2]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-end"/>
-
-    <eval expected="54470" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="57470" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="347000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@ipda"/>
-    <eval expected="3000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@padding-end"/>
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-end"/>
     
-    <eval expected="54470" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="57470" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="350000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@ipda"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@padding-before"/>
-    <eval expected="46130" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="49130" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="54470" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="57470" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="350000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@ipda"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@padding-before"/>
+    <eval expected="46130" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="49130" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-end"/>
     
   </checks>
 </testcase>
index c7e9210f02a77592a3f8483e0061c5814b33243d..345a2c4c333ed761623ae2e39e1503e61ccdeba1 100755 (executable)
-<?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 fo:inlines with border and padding properties and nested inner blocks.
-    </p>
-  </info>
-  <fo>
-    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
-      <fo:layout-master-set>
-        <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="5pt">
-          <fo:region-body/>
-        </fo:simple-page-master>
-      </fo:layout-master-set>
-      <fo:page-sequence master-reference="normal" white-space-collapse="true" language="en">
-        <fo:flow flow-name="xsl-region-body" font-size="10pt">
-          <fo:block background-color="silver" margin="3pt 0pt 3pt 0pt">
-            Before inline
-            <fo:inline 
-              border="solid 1pt red" 
-              border-start-width.length="1pt" 
-              border-start-width.conditionality="retain" 
-              border-end-width.length="1pt" 
-              border-end-width.conditionality="retain" 
-              padding="2pt"
-              padding-start.length="2pt" 
-              padding-start.conditionality="retain" 
-              padding-end.length="2pt" 
-              padding-end.conditionality="retain" 
-              background-color="yellow"><fo:block>starting with a block</fo:block>
-              after block</fo:inline>
-            After inline with conditionality="retain"
-          </fo:block>
-          <fo:block background-color="silver" margin="3pt 0pt 3pt 0pt">
-            Before inline
-            <fo:inline 
-              border="solid 1pt red" 
-              border-start-width.length="1pt" 
-              border-start-width.conditionality="retain" 
-              border-end-width.length="1pt" 
-              border-end-width.conditionality="retain" 
-              padding="2pt"
-              padding-start.length="2pt" 
-              padding-start.conditionality="retain" 
-              padding-end.length="2pt" 
-              padding-end.conditionality="retain" 
-              background-color="yellow">before block
-              <fo:block>having a block at the end of an inline</fo:block></fo:inline>
-            After inline with conditionality="retain"
-          </fo:block>
-          <fo:block background-color="silver" margin="3pt 0pt 3pt 0pt">
-            Before inline
-            <fo:inline 
-              border="solid 1pt red"
-              border-start-width.length="1pt" 
-              border-start-width.conditionality="retain" 
-              border-end-width.length="1pt" 
-              border-end-width.conditionality="retain" 
-              padding="2pt"
-              padding-start.length="2pt" 
-              padding-start.conditionality="retain" 
-              padding-end.length="2pt" 
-              padding-end.conditionality="retain" 
-              background-color="yellow">before block
-              <fo:block>As far as the laws of mathematics refer to reality, they are not certain,
-            and as far as they are certain, they do not refer to reality - Albert Einstein</fo:block>
-            after block</fo:inline>
-            After inline with conditionality="retain"
-          </fo:block>
-        </fo:flow>
-      </fo:page-sequence>
-    </fo:root>
-  </fo>
-  <checks>
-    <eval expected="344000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@ipda"/>
-    <eval expected="3000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-start"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-start"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-end"/>
-    <eval expected="46130" xpath="//flow/block[2]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="52130" xpath="//flow/block[2]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-start"/>
-    <eval expected="2000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-end"/>
-
-    <eval expected="54470" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="60470" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="344000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@ipda"/>
-    <eval expected="3000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@border-start"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@padding-start"/>
-    <eval expected="2000" xpath="//flow/block[5]/lineArea[2]/inlineblockparent/@padding-end"/>
-    
-    <eval expected="54470" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="60470" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="344000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@ipda"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@border-start"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@padding-start"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[2]/inlineblockparent/@padding-end"/>
-    <eval expected="46130" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="52130" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-start"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-end"/>
-    
-  </checks>
-</testcase>
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+  Copyright 2005 The Apache Software Foundation\r
+\r
+  Licensed under the Apache License, Version 2.0 (the "License");\r
+  you may not use this file except in compliance with the License.\r
+  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$ -->\r
+<testcase>\r
+  <info>\r
+    <p>\r
+      This test checks fo:inlines with border and padding properties and nested inner blocks.\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" margin="5pt">\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" language="en">\r
+        <fo:flow flow-name="xsl-region-body" font-size="10pt">\r
+          <fo:block background-color="silver" margin="3pt 0pt 3pt 0pt">\r
+            Before inline\r
+            <fo:inline \r
+              border="solid 1pt red" \r
+              border-start-width.length="1pt" \r
+              border-start-width.conditionality="retain" \r
+              border-end-width.length="1pt" \r
+              border-end-width.conditionality="retain" \r
+              padding="2pt"\r
+              padding-start.length="2pt" \r
+              padding-start.conditionality="retain" \r
+              padding-end.length="2pt" \r
+              padding-end.conditionality="retain" \r
+              background-color="yellow"><fo:block>starting with a block</fo:block>\r
+              after block</fo:inline>\r
+            After inline with conditionality="retain"\r
+          </fo:block>\r
+          <fo:block background-color="silver" margin="3pt 0pt 3pt 0pt">\r
+            Before inline\r
+            <fo:inline \r
+              border="solid 1pt red" \r
+              border-start-width.length="1pt" \r
+              border-start-width.conditionality="retain" \r
+              border-end-width.length="1pt" \r
+              border-end-width.conditionality="retain" \r
+              padding="2pt"\r
+              padding-start.length="2pt" \r
+              padding-start.conditionality="retain" \r
+              padding-end.length="2pt" \r
+              padding-end.conditionality="retain" \r
+              background-color="yellow">before block\r
+              <fo:block>having a block at the end of an inline</fo:block></fo:inline>\r
+            After inline with conditionality="retain"\r
+          </fo:block>\r
+          <fo:block background-color="silver" margin="3pt 0pt 3pt 0pt">\r
+            Before inline\r
+            <fo:inline \r
+              border="solid 1pt red"\r
+              border-start-width.length="1pt" \r
+              border-start-width.conditionality="retain" \r
+              border-end-width.length="1pt" \r
+              border-end-width.conditionality="retain" \r
+              padding="2pt"\r
+              padding-start.length="2pt" \r
+              padding-start.conditionality="retain" \r
+              padding-end.length="2pt" \r
+              padding-end.conditionality="retain" \r
+              background-color="yellow">before block\r
+              <fo:block>As far as the laws of mathematics refer to reality, they are not certain,\r
+            and as far as they are certain, they do not refer to reality - Albert Einstein</fo:block>\r
+            after block</fo:inline>\r
+            After inline with conditionality="retain"\r
+          </fo:block>\r
+        </fo:flow>\r
+      </fo:page-sequence>\r
+    </fo:root>\r
+  </fo>\r
+  <checks>\r
+    <eval expected="344000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@ipd"/>\r
+    <eval expected="350000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@ipda"/>\r
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@offset"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@border-after"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@border-before"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@border-start"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@border-end"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@padding-after"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@padding-before"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@padding-start"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[2]/inlineblockparent/@padding-end"/>\r
+    <eval expected="46130" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipd"/>\r
+    <eval expected="52130" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipda"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-after"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-before"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-start"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-end"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-after"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-before"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-start"/>\r
+    <eval expected="2000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-end"/>\r
+\r
+    <eval expected="54470" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipd"/>\r
+    <eval expected="60470" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipda"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[1]/inlineparent/@border-after"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[1]/inlineparent/@border-before"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[1]/inlineparent/@border-start"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[1]/inlineparent/@border-end"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[1]/inlineparent/@padding-after"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[1]/inlineparent/@padding-before"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[1]/inlineparent/@padding-start"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[1]/inlineparent/@padding-end"/>\r
+    <eval expected="344000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@ipd"/>\r
+    <eval expected="350000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@ipda"/>\r
+    <eval expected="3000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@offset"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-after"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-before"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-start"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@border-end"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-after"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-before"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-start"/>\r
+    <eval expected="2000" xpath="//flow/block[2]/lineArea[2]/inlineblockparent/@padding-end"/>\r
+    \r
+    <eval expected="54470" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipd"/>\r
+    <eval expected="60470" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipda"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-after"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-before"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-start"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-end"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-after"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-before"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-start"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-end"/>\r
+    <eval expected="344000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@ipd"/>\r
+    <eval expected="350000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@ipda"/>\r
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@offset"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@border-after"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@border-before"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@border-start"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@border-end"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@padding-after"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@padding-before"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@padding-start"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[2]/inlineblockparent/@padding-end"/>\r
+    <eval expected="46130" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipd"/>\r
+    <eval expected="52130" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipda"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-after"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-before"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-start"/>\r
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-end"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-after"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-before"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-start"/>\r
+    <eval expected="2000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-end"/>\r
+    \r
+  </checks>\r
+</testcase>\r
index 744b6b33f1ce50d3f002fdf86ca3f4d26e40e962..86284f868298360cab946f7eb1ed3d767f09bb98 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="255100" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="265100" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="335720" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="345720" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="35570" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="45570" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-start"/>
+    
     <eval expected="255100" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipd"/>
     <eval expected="265100" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="3000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-start"/>
     
+    <eval expected="259229" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="269229" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="340000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="35570" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="45570" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-start"/>
+    
+    <eval expected="216190" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="226190" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="299050" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="309050" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="111150" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="121150" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-start"/>
+    
     <eval expected="255100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="265100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="261100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-start"/>
     <eval expected="335720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="345720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="335720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[2]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-start"/>
     <eval expected="35570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="45570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="39570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[3]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-before"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-start"/>
     
-    <eval expected="259229" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="269229" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="255100" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="261100" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="335720" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="335720" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="35570" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="39570" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-end"/>
+    
+    <eval expected="262613" xpath="//flow/block[7]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="268613" xpath="//flow/block[7]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="350000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="35570" xpath="//flow/block[7]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="39570" xpath="//flow/block[7]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-end"/>
+    
+    <eval expected="216190" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="222190" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="340000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="310170" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="310170" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[2]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="35570" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="45570" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="100030" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="104030" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[3]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-before"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="216190" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="226190" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="299050" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="309050" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="111150" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="121150" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="255100" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="261100" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="335720" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="335720" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="35570" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="39570" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-end"/>
-    
-    <eval expected="255100" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="261100" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="335720" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="335720" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="35570" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="39570" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-end"/>
-    
-    <eval expected="262613" xpath="//flow/block[20]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="268613" xpath="//flow/block[20]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="350000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="35570" xpath="//flow/block[20]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="39570" xpath="//flow/block[20]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-end"/>
-    
-    <eval expected="216190" xpath="//flow/block[23]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="222190" xpath="//flow/block[23]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="310170" xpath="//flow/block[23]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="310170" xpath="//flow/block[23]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="100030" xpath="//flow/block[23]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="104030" xpath="//flow/block[23]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-end"/>
   </checks>
 </testcase>
index bb9b50ab50f5d34d4f064410b7eab18e8636202a..3e2d4a9b9fc43e8ec030f64156db0dd59083dfba 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="255100" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="264100" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="335720" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="343720" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="35570" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="44570" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-start"/>
+
     <eval expected="255100" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipd"/>
     <eval expected="264100" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="3000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-start"/>
 
-    <eval expected="255100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="264100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="260075" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="269075" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="342000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="35570" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="44570" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-start"/>
+
+    <eval expected="237870" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="246870" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="317940" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="325940" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="70580" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="79580" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-start"/>
+
+    <eval expected="183960" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="193960" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="335720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="343720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="255680" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="265680" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[2]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="35570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="44570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="186750" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="196750" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[3]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-before"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-start"/>
 
-    <eval expected="260075" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="269075" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="342000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="35570" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="44570" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-start"/>
-
-    <eval expected="237870" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="246870" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="317940" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="325940" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="70580" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="79580" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-start"/>
-
-    <eval expected="183960" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="193960" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="255680" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="265680" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="186750" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="196750" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-start"/>
-
-    <eval expected="172840" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="178840" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="266800" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="266800" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="186750" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="190750" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="172840" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="178840" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="266800" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="266800" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="186750" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="190750" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-end"/>
   </checks>
 </testcase>
index b2a0444adae53ca1f4f4ac3bbd75958054548ce4..d55fdc934881a9f1ba9ca2b29b5187942549a827 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="255100" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="261100" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="335720" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="335720" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="35570" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="39570" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-end"/>
+    
     <eval expected="255100" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipd"/>
     <eval expected="261100" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="1000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-end"/>
     
+    <eval expected="262613" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="268613" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="350000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="35570" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="39570" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-end"/>
+    
+    <eval expected="216190" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="222190" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="310170" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="310170" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="100030" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="104030" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-end"/>
+
     <eval expected="255100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="261100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="265100" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-start"/>
     <eval expected="335720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="335720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="345720" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[2]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-start"/>
     <eval expected="35570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="39570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="45570" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[3]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-before"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-start"/>
+    
+    <eval expected="255100" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="265100" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="335720" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="345720" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="35570" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="45570" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-start"/>
+    
+    <eval expected="259229" xpath="//flow/block[7]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="269229" xpath="//flow/block[7]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="340000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="35570" xpath="//flow/block[7]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="45570" xpath="//flow/block[7]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-start"/>
     
-    <eval expected="262613" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="268613" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="216190" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="226190" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="350000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="299050" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="309050" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[2]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="35570" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="39570" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="3000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="111150" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="121150" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[3]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-before"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-end"/>
-    
-    <eval expected="216190" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="222190" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="310170" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="310170" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="100030" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="104030" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-end"/>
-
-    <eval expected="255100" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="265100" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="335720" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="345720" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="35570" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="45570" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="255100" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="265100" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="335720" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="345720" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="35570" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="45570" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="259229" xpath="//flow/block[20]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="269229" xpath="//flow/block[20]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="340000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="35570" xpath="//flow/block[20]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="45570" xpath="//flow/block[20]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="216190" xpath="//flow/block[23]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="226190" xpath="//flow/block[23]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="299050" xpath="//flow/block[23]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="309050" xpath="//flow/block[23]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="111150" xpath="//flow/block[23]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="121150" xpath="//flow/block[23]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-start"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-start"/>
   </checks>
 </testcase>
index 06bfae0ea4d52e90e2c28919d8bba87332ed9f6f..48750c06e75680c9ea69ce617415a44a56028788 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="250110" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="256110" xpath="//flow/block[1]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[1]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="348490" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="348490" xpath="//flow/block[1]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="91710" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="95710" xpath="//flow/block[1]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[1]/lineArea[3]/inlineparent/@padding-end"/>
+    
     <eval expected="250110" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipd"/>
     <eval expected="256110" xpath="//flow/block[2]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="1000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[2]/lineArea[3]/inlineparent/@padding-end"/>
     
+    <eval expected="250110" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="256110" xpath="//flow/block[3]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[3]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="349999" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="349999" xpath="//flow/block[3]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="91710" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="95710" xpath="//flow/block[3]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea[3]/inlineparent/@padding-end"/>
+    
+    <eval expected="238440" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="244440" xpath="//flow/block[4]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="320690" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="320690" xpath="//flow/block[4]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="131180" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="135180" xpath="//flow/block[4]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[4]/lineArea[3]/inlineparent/@padding-end"/>
+
     <eval expected="250110" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="256110" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="260110" xpath="//flow/block[5]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[1]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[5]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="348490" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="348490" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="336820" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="346820" xpath="//flow/block[5]/lineArea[2]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[2]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[2]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="91710" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="95710" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="3000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[5]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="103380" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="113380" xpath="//flow/block[5]/lineArea[3]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[3]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-before"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[5]/lineArea[3]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[5]/lineArea[3]/inlineparent/@padding-start"/>
+    
+    <eval expected="250110" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="260110" xpath="//flow/block[6]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="336820" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="346820" xpath="//flow/block[6]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[2]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="103380" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="113380" xpath="//flow/block[6]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[6]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea[3]/inlineparent/@padding-start"/>
+    
+    <eval expected="250110" xpath="//flow/block[7]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="260110" xpath="//flow/block[7]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[1]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea[1]/inlineparent/@padding-start"/>
+    <eval expected="340000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="350000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[2]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[2]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="103380" xpath="//flow/block[7]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="113380" xpath="//flow/block[7]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[3]/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[7]/lineArea[3]/inlineparent/@border-start"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea[3]/inlineparent/@padding-start"/>
     
-    <eval expected="250110" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="256110" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
+    <eval expected="238440" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipd"/>
+    <eval expected="248440" xpath="//flow/block[8]/lineArea[1]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[1]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-before"/>
+    <eval expected="3000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-end"/>
     <eval expected="5000" xpath="//flow/block[8]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="349999" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="349999" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipda"/>
+    <eval expected="320690" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipd"/>
+    <eval expected="330690" xpath="//flow/block[8]/lineArea[2]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[2]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[2]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="91710" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="95710" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
+    <eval expected="3000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea[2]/inlineparent/@padding-start"/>
+    <eval expected="131180" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipd"/>
+    <eval expected="141180" xpath="//flow/block[8]/lineArea[3]/inlineparent/@ipda"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[3]/inlineparent/@offset"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-after"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-before"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea[3]/inlineparent/@border-start"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-after"/>
     <eval expected="1000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-before"/>
     <eval expected="3000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-end"/>
-    
-    <eval expected="238440" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="244440" xpath="//flow/block[11]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="320690" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="320690" xpath="//flow/block[11]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="131180" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="135180" xpath="//flow/block[11]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[11]/lineArea[3]/inlineparent/@padding-end"/>
-
-    <eval expected="250110" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="260110" xpath="//flow/block[14]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="336820" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="346820" xpath="//flow/block[14]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="103380" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="113380" xpath="//flow/block[14]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[14]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="250110" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="260110" xpath="//flow/block[17]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="336820" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="346820" xpath="//flow/block[17]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="103380" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="113380" xpath="//flow/block[17]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[17]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[17]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="250110" xpath="//flow/block[20]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="260110" xpath="//flow/block[20]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[20]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="340000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="350000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[20]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="103380" xpath="//flow/block[20]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="113380" xpath="//flow/block[20]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[20]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[20]/lineArea[3]/inlineparent/@padding-start"/>
-    
-    <eval expected="238440" xpath="//flow/block[23]/lineArea[1]/inlineparent/@ipd"/>
-    <eval expected="248440" xpath="//flow/block[23]/lineArea[1]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[1]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[23]/lineArea[1]/inlineparent/@padding-start"/>
-    <eval expected="320690" xpath="//flow/block[23]/lineArea[2]/inlineparent/@ipd"/>
-    <eval expected="330690" xpath="//flow/block[23]/lineArea[2]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[2]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[2]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[23]/lineArea[2]/inlineparent/@padding-start"/>
-    <eval expected="131180" xpath="//flow/block[23]/lineArea[3]/inlineparent/@ipd"/>
-    <eval expected="141180" xpath="//flow/block[23]/lineArea[3]/inlineparent/@ipda"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[3]/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[23]/lineArea[3]/inlineparent/@border-start"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-before"/>
-    <eval expected="3000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[23]/lineArea[3]/inlineparent/@padding-start"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea[3]/inlineparent/@padding-start"/>
   </checks>
 </testcase>
index 550bca8cb16e65375f86a3fb0bfb9da9bb5279e4..e812bc3876689098bfdcef1ac84560369a169081 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="12950" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[1]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[1]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
     <eval expected="12950" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="1925" xpath="//flow/block[2]/lineArea[1]/@space-before"/>
     <eval expected="1925" xpath="//flow/block[2]/lineArea[1]/@space-after"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
+    <eval expected="12950" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[3]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[3]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="3700" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
+    <eval expected="12950" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[4]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[4]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="2872" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
     <eval expected="12950" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
     <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-before"/>
     <eval expected="1925" xpath="//flow/block[5]/lineArea[1]/@space-after"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="574" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
+    <eval expected="12950" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[6]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[6]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="1436" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
+    <eval expected="12950" xpath="//flow/block[7]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[7]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[7]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="1850" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
     <eval expected="12950" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
     <eval expected="1925" xpath="//flow/block[8]/lineArea[1]/@space-before"/>
     <eval expected="1925" xpath="//flow/block[8]/lineArea[1]/@space-after"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3700" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[11]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[11]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[14]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[14]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="574" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[17]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[17]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="1436" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[20]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[20]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[20]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="1850" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[23]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[23]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[23]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="1826" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="1826" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
-    <eval expected="12950" xpath="//flow/block[26]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[26]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[26]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3700" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="12950" xpath="//flow/block[9]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[9]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[9]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="3700" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
-    <eval expected="12950" xpath="//flow/block[29]/lineArea[1]/@bpd"/>
-    <eval expected="1925" xpath="//flow/block[29]/lineArea[1]/@space-before"/>
-    <eval expected="1925" xpath="//flow/block[29]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="12950" xpath="//flow/block[10]/lineArea[1]/@bpd"/>
+    <eval expected="1925" xpath="//flow/block[10]/lineArea[1]/@space-before"/>
+    <eval expected="1925" xpath="//flow/block[10]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/inlineparent/@offset"/>
   </checks>
 </testcase>
index 1d863bfc1e83c99cc85e0ba41c72898208462304..f382e8aa3e0bcf8d805df25ca2ff9fe29c73967a 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="12950" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="1375" xpath="//flow/block[1]/lineArea[1]/@space-before"/>
+    <eval expected="1375" xpath="//flow/block[1]/lineArea[1]/@space-after"/>
+    <eval expected="2872" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-2872" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
     <eval expected="12950" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="1375" xpath="//flow/block[2]/lineArea[1]/@space-before"/>
     <eval expected="1375" xpath="//flow/block[2]/lineArea[1]/@space-after"/>
     <eval expected="2872" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="-2872" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
+    <eval expected="12950" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="1375" xpath="//flow/block[3]/lineArea[1]/@space-before"/>
+    <eval expected="1375" xpath="//flow/block[3]/lineArea[1]/@space-after"/>
+    <eval expected="3700" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-3700" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
+    <eval expected="12950" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="1375" xpath="//flow/block[4]/lineArea[1]/@space-before"/>
+    <eval expected="1375" xpath="//flow/block[4]/lineArea[1]/@space-after"/>
+    <eval expected="2872" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-2872" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
     <eval expected="12950" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
     <eval expected="1375" xpath="//flow/block[5]/lineArea[1]/@space-before"/>
     <eval expected="1375" xpath="//flow/block[5]/lineArea[1]/@space-after"/>
-    <eval expected="2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-2872" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="574" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-574" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
+    <eval expected="12950" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="1375" xpath="//flow/block[6]/lineArea[1]/@space-before"/>
+    <eval expected="1375" xpath="//flow/block[6]/lineArea[1]/@space-after"/>
+    <eval expected="1436" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-1436" xpath="//flow/block[6]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+
+    <eval expected="12950" xpath="//flow/block[7]/lineArea[1]/@bpd"/>
+    <eval expected="1375" xpath="//flow/block[7]/lineArea[1]/@space-before"/>
+    <eval expected="1375" xpath="//flow/block[7]/lineArea[1]/@space-after"/>
+    <eval expected="1850" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-1850" xpath="//flow/block[7]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
     <eval expected="12950" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
     <eval expected="1375" xpath="//flow/block[8]/lineArea[1]/@space-before"/>
     <eval expected="1375" xpath="//flow/block[8]/lineArea[1]/@space-after"/>
-    <eval expected="3700" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-3700" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="1375" xpath="//flow/block[11]/lineArea[1]/@space-before"/>
-    <eval expected="1375" xpath="//flow/block[11]/lineArea[1]/@space-after"/>
-    <eval expected="2872" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-2872" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="1375" xpath="//flow/block[14]/lineArea[1]/@space-before"/>
-    <eval expected="1375" xpath="//flow/block[14]/lineArea[1]/@space-after"/>
-    <eval expected="574" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-574" xpath="//flow/block[14]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="1375" xpath="//flow/block[17]/lineArea[1]/@space-before"/>
-    <eval expected="1375" xpath="//flow/block[17]/lineArea[1]/@space-after"/>
-    <eval expected="1436" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-1436" xpath="//flow/block[17]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[20]/lineArea[1]/@bpd"/>
-    <eval expected="1375" xpath="//flow/block[20]/lineArea[1]/@space-before"/>
-    <eval expected="1375" xpath="//flow/block[20]/lineArea[1]/@space-after"/>
-    <eval expected="1850" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-1850" xpath="//flow/block[20]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-
-    <eval expected="12950" xpath="//flow/block[23]/lineArea[1]/@bpd"/>
-    <eval expected="1375" xpath="//flow/block[23]/lineArea[1]/@space-before"/>
-    <eval expected="1375" xpath="//flow/block[23]/lineArea[1]/@space-after"/>
-    <eval expected="1826" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-1826" xpath="//flow/block[23]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="1826" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-1826" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
-    <eval expected="12950" xpath="//flow/block[26]/lineArea[1]/@bpd"/>
-    <eval expected="1375" xpath="//flow/block[26]/lineArea[1]/@space-before"/>
-    <eval expected="1375" xpath="//flow/block[26]/lineArea[1]/@space-after"/>
-    <eval expected="3700" xpath="//flow/block[26]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="-3700" xpath="//flow/block[26]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="12950" xpath="//flow/block[9]/lineArea[1]/@bpd"/>
+    <eval expected="1375" xpath="//flow/block[9]/lineArea[1]/@space-before"/>
+    <eval expected="1375" xpath="//flow/block[9]/lineArea[1]/@space-after"/>
+    <eval expected="3700" xpath="//flow/block[9]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="-3700" xpath="//flow/block[9]/lineArea[1]/inlineparent/inlineparent/@offset"/>
 
-    <eval expected="12950" xpath="//flow/block[29]/lineArea[1]/@bpd"/>
-    <eval expected="1375" xpath="//flow/block[29]/lineArea[1]/@space-before"/>
-    <eval expected="1375" xpath="//flow/block[29]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="12950" xpath="//flow/block[10]/lineArea[1]/@bpd"/>
+    <eval expected="1375" xpath="//flow/block[10]/lineArea[1]/@space-before"/>
+    <eval expected="1375" xpath="//flow/block[10]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/inlineparent/@offset"/>
   </checks>
 </testcase>
index 8b1056f625dbdbe044730b11c9f43790ed41b751..4d09ad57b596830b076e91ea9d155fdb9a69bb24 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="14800" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5744" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="1850" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+
     <eval expected="14800" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[1]/@offset"/>
     <eval expected="5744" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="1850" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="14800" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5744" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="14800" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5744" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-3700" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="14800" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5744" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-3700" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="15018" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5744" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/text[1]/@offset"/>
-    <eval expected="-1826" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="15018" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="5744" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/text[1]/@offset"/>
+    <eval expected="-1826" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/inlineparent/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 1ff5ca2f1da0e5ab4508f6620f8f53921b517e7f..457b4a8984d06eea2a36a248114b1d54360779a5 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="18500" xpath="//flow/block[1]/lineArea[1]/@bpd"/>
+    <eval expected="2750" xpath="//flow/block[1]/lineArea[1]/@space-before"/>
+    <eval expected="2750" xpath="//flow/block[1]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="7180" xpath="//flow/block[1]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[1]/text[2]/@offset"/>
+
     <eval expected="18500" xpath="//flow/block[2]/lineArea[1]/@bpd"/>
     <eval expected="2750" xpath="//flow/block[2]/lineArea[1]/@space-before"/>
     <eval expected="2750" xpath="//flow/block[2]/lineArea[1]/@space-after"/>
     <eval expected="7180" xpath="//flow/block[2]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[1]/text[2]/@offset"/>
 
+    <eval expected="18500" xpath="//flow/block[3]/lineArea[1]/@bpd"/>
+    <eval expected="2750" xpath="//flow/block[3]/lineArea[1]/@space-before"/>
+    <eval expected="2750" xpath="//flow/block[3]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[1]/text[2]/@offset"/>
+
+    <eval expected="18500" xpath="//flow/block[4]/lineArea[1]/@bpd"/>
+    <eval expected="2750" xpath="//flow/block[4]/lineArea[1]/@space-before"/>
+    <eval expected="2750" xpath="//flow/block[4]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[1]/text[2]/@offset"/>
+
     <eval expected="18500" xpath="//flow/block[5]/lineArea[1]/@bpd"/>
     <eval expected="2750" xpath="//flow/block[5]/lineArea[1]/@space-before"/>
     <eval expected="2750" xpath="//flow/block[5]/lineArea[1]/@space-after"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="7180" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="4565" xpath="//flow/block[5]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="18500" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
+    <eval expected="18500" xpath="//flow/block[6]/lineArea[1]/@bpd"/>
+    <eval expected="2750" xpath="//flow/block[6]/lineArea[1]/@space-before"/>
+    <eval expected="2750" xpath="//flow/block[6]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="9250" xpath="//flow/block[6]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[6]/lineArea[1]/text[2]/@offset"/>
+
+    <eval expected="18500" xpath="//flow/block[7]/lineArea[1]/@bpd"/>
+    <eval expected="2750" xpath="//flow/block[7]/lineArea[1]/@space-before"/>
+    <eval expected="2750" xpath="//flow/block[7]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="9250" xpath="//flow/block[7]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[7]/lineArea[1]/text[2]/@offset"/>
+
+    <eval expected="21780" xpath="//flow/block[8]/lineArea[1]/@bpd"/>
     <eval expected="2750" xpath="//flow/block[8]/lineArea[1]/@space-before"/>
     <eval expected="2750" xpath="//flow/block[8]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="3280" xpath="//flow/block[8]/lineArea[1]/text[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[8]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
+    <eval expected="3280" xpath="//flow/block[8]/lineArea[1]/text[2]/@offset"/>
+
+    <eval expected="19045" xpath="//flow/block[9]/lineArea[1]/@bpd"/>
+    <eval expected="2750" xpath="//flow/block[9]/lineArea[1]/@space-before"/>
+    <eval expected="2750" xpath="//flow/block[9]/lineArea[1]/@space-after"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="9795" xpath="//flow/block[9]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="0" xpath="//flow/block[9]/lineArea[1]/text[2]/@offset"/>
+
+    <eval expected="28960" xpath="//flow/block[10]/lineArea[1]/@bpd"/>
+    <eval expected="2750" xpath="//flow/block[10]/lineArea[1]/@space-before"/>
+    <eval expected="2750" xpath="//flow/block[10]/lineArea[1]/@space-after"/>
+    <eval expected="10460" xpath="//flow/block[10]/lineArea[1]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[10]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="10460" xpath="//flow/block[10]/lineArea[1]/text[2]/@offset"/>
 
-    <eval expected="18500" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
+    <eval expected="23730" xpath="//flow/block[11]/lineArea[1]/@bpd"/>
     <eval expected="2750" xpath="//flow/block[11]/lineArea[1]/@space-before"/>
     <eval expected="2750" xpath="//flow/block[11]/lineArea[1]/@space-after"/>
     <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
+    <eval expected="5230" xpath="//flow/block[11]/lineArea[1]/inlineparent/@offset"/>
     <eval expected="0" xpath="//flow/block[11]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="18500" xpath="//flow/block[14]/lineArea[1]/@bpd"/>
-    <eval expected="2750" xpath="//flow/block[14]/lineArea[1]/@space-before"/>
-    <eval expected="2750" xpath="//flow/block[14]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="4565" xpath="//flow/block[14]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="18500" xpath="//flow/block[17]/lineArea[1]/@bpd"/>
-    <eval expected="2750" xpath="//flow/block[17]/lineArea[1]/@space-before"/>
-    <eval expected="2750" xpath="//flow/block[17]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="9250" xpath="//flow/block[17]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[17]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="18500" xpath="//flow/block[20]/lineArea[1]/@bpd"/>
-    <eval expected="2750" xpath="//flow/block[20]/lineArea[1]/@space-before"/>
-    <eval expected="2750" xpath="//flow/block[20]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="9250" xpath="//flow/block[20]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[20]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="21780" xpath="//flow/block[23]/lineArea[1]/@bpd"/>
-    <eval expected="2750" xpath="//flow/block[23]/lineArea[1]/@space-before"/>
-    <eval expected="2750" xpath="//flow/block[23]/lineArea[1]/@space-after"/>
-    <eval expected="3280" xpath="//flow/block[23]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[23]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="3280" xpath="//flow/block[23]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="19045" xpath="//flow/block[26]/lineArea[1]/@bpd"/>
-    <eval expected="2750" xpath="//flow/block[26]/lineArea[1]/@space-before"/>
-    <eval expected="2750" xpath="//flow/block[26]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="9795" xpath="//flow/block[26]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[26]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="28960" xpath="//flow/block[29]/lineArea[1]/@bpd"/>
-    <eval expected="2750" xpath="//flow/block[29]/lineArea[1]/@space-before"/>
-    <eval expected="2750" xpath="//flow/block[29]/lineArea[1]/@space-after"/>
-    <eval expected="10460" xpath="//flow/block[29]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[29]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="10460" xpath="//flow/block[29]/lineArea[1]/text[2]/@offset"/>
-
-    <eval expected="23730" xpath="//flow/block[32]/lineArea[1]/@bpd"/>
-    <eval expected="2750" xpath="//flow/block[32]/lineArea[1]/@space-before"/>
-    <eval expected="2750" xpath="//flow/block[32]/lineArea[1]/@space-after"/>
-    <eval expected="0" xpath="//flow/block[32]/lineArea[1]/text[1]/@offset"/>
-    <eval expected="5230" xpath="//flow/block[32]/lineArea[1]/inlineparent/@offset"/>
-    <eval expected="0" xpath="//flow/block[32]/lineArea[1]/text[2]/@offset"/>
   </checks>
 </testcase>
index 53749b355181ac844dc5904ce2cc81c30beb6547..64d401957d42cdddd66864ca931cc3dafb8f3230 100755 (executable)
     </fo:root>
   </fo>
   <checks>
-    <eval expected="48812" xpath="//flow/block[2]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="48812" xpath="//flow/block[1]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[2]/viewport[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[2]/viewport[2]/@offset"/>
+    <eval expected="48812" xpath="//flow/block[1]/lineArea[2]/text[2]/@offset"/>
+    <eval expected="35995" xpath="//flow/block[1]/lineArea[2]/viewport[3]/@offset"/>
+    <eval expected="17998" xpath="//flow/block[1]/lineArea[2]/viewport[4]/@offset"/>
+    <eval expected="48812" xpath="//flow/block[1]/lineArea[2]/text[3]/@offset"/>
+    <eval expected="34379" xpath="//flow/block[1]/lineArea[2]/viewport[5]/@offset"/>
+    <eval expected="48812" xpath="//flow/block[1]/lineArea[2]/text[4]/@offset"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea[2]/viewport[6]/@offset"/>
+    <eval expected="48812" xpath="//flow/block[1]/lineArea[2]/text[5]/@offset"/>
+
+    <eval expected="14433" xpath="//flow/block[2]/lineArea[2]/text[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[2]/viewport[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea[2]/viewport[2]/@offset"/>
-    <eval expected="48812" xpath="//flow/block[2]/lineArea[2]/text[2]/@offset"/>
+    <eval expected="14433" xpath="//flow/block[2]/lineArea[2]/text[2]/@offset"/>
     <eval expected="35995" xpath="//flow/block[2]/lineArea[2]/viewport[3]/@offset"/>
     <eval expected="17998" xpath="//flow/block[2]/lineArea[2]/viewport[4]/@offset"/>
-    <eval expected="48812" xpath="//flow/block[2]/lineArea[2]/text[3]/@offset"/>
-    <eval expected="34379" xpath="//flow/block[2]/lineArea[2]/viewport[5]/@offset"/>
-    <eval expected="48812" xpath="//flow/block[2]/lineArea[2]/text[4]/@offset"/>
-    <eval expected="0" xpath="//flow/block[2]/lineArea[2]/viewport[6]/@offset"/>
-    <eval expected="48812" xpath="//flow/block[2]/lineArea[2]/text[5]/@offset"/>
+    <eval expected="14433" xpath="//flow/block[2]/lineArea[2]/text[3]/@offset"/>
+    <eval expected="0" xpath="//flow/block[2]/lineArea[2]/viewport[5]/@offset"/>
+    <eval expected="14433" xpath="//flow/block[2]/lineArea[2]/text[4]/@offset"/>
+
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/viewport[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/viewport[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/text[2]/@offset"/>
+    <eval expected="35995" xpath="//flow/block[3]/lineArea[2]/viewport[3]/@offset"/>
+    <eval expected="17998" xpath="//flow/block[3]/lineArea[2]/viewport[4]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea[2]/text[3]/@offset"/>
+
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/text[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/viewport[1]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/viewport[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/text[2]/@offset"/>
+    <eval expected="35995" xpath="//flow/block[4]/lineArea[2]/viewport[3]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/viewport[4]/@offset"/>
+    <eval expected="0" xpath="//flow/block[4]/lineArea[2]/text[3]/@offset"/>
 
     <eval expected="14433" xpath="//flow/block[5]/lineArea[2]/text[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[2]/viewport[1]/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[2]/viewport[2]/@offset"/>
     <eval expected="14433" xpath="//flow/block[5]/lineArea[2]/text[2]/@offset"/>
     <eval expected="35995" xpath="//flow/block[5]/lineArea[2]/viewport[3]/@offset"/>
-    <eval expected="17998" xpath="//flow/block[5]/lineArea[2]/viewport[4]/@offset"/>
+    <eval expected="0" xpath="//flow/block[5]/lineArea[2]/viewport[4]/@offset"/>
     <eval expected="14433" xpath="//flow/block[5]/lineArea[2]/text[3]/@offset"/>
     <eval expected="0" xpath="//flow/block[5]/lineArea[2]/viewport[5]/@offset"/>
     <eval expected="14433" xpath="//flow/block[5]/lineArea[2]/text[4]/@offset"/>
-
-    <eval expected="0" xpath="//flow/block[8]/lineArea[2]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[2]/viewport[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[2]/viewport[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[2]/text[2]/@offset"/>
-    <eval expected="35995" xpath="//flow/block[8]/lineArea[2]/viewport[3]/@offset"/>
-    <eval expected="17998" xpath="//flow/block[8]/lineArea[2]/viewport[4]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea[2]/text[3]/@offset"/>
-
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/viewport[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/viewport[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/text[2]/@offset"/>
-    <eval expected="35995" xpath="//flow/block[11]/lineArea[2]/viewport[3]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/viewport[4]/@offset"/>
-    <eval expected="0" xpath="//flow/block[11]/lineArea[2]/text[3]/@offset"/>
-
-    <eval expected="14433" xpath="//flow/block[14]/lineArea[2]/text[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/viewport[1]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/viewport[2]/@offset"/>
-    <eval expected="14433" xpath="//flow/block[14]/lineArea[2]/text[2]/@offset"/>
-    <eval expected="35995" xpath="//flow/block[14]/lineArea[2]/viewport[3]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/viewport[4]/@offset"/>
-    <eval expected="14433" xpath="//flow/block[14]/lineArea[2]/text[3]/@offset"/>
-    <eval expected="0" xpath="//flow/block[14]/lineArea[2]/viewport[5]/@offset"/>
-    <eval expected="14433" xpath="//flow/block[14]/lineArea[2]/text[4]/@offset"/>
   </checks>
 </testcase>
index 6c0c99a75ba2868a992ffc6e2072d5f170158cf3..aa89bcbfa24126431c9746ec97ee16d0cf46c0b6 100755 (executable)
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea/space/@border-end"/>
     <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[4]/lineArea/space/@border-start"/>
 
+    <eval expected="11100" xpath="//flow/block[6]/lineArea/@bpd"/>
+    <eval expected="360000" xpath="//flow/block[6]/lineArea/@ipd"/>
+    <eval expected="16000" xpath="//flow/block[6]/lineArea/inlineparent/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[6]/lineArea/inlineparent/@ipda"/>
+    <eval expected="5280" xpath="//flow/block[6]/lineArea/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[6]/lineArea/inlineparent/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea/inlineparent/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea/inlineparent/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea/inlineparent/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[6]/lineArea/inlineparent/@padding-start"/>
+
     <eval expected="11100" xpath="//flow/block[7]/lineArea/@bpd"/>
     <eval expected="360000" xpath="//flow/block[7]/lineArea/@ipd"/>
-    <eval expected="16000" xpath="//flow/block[7]/lineArea/inlineparent/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[7]/lineArea/inlineparent/@ipda"/>
-    <eval expected="5280" xpath="//flow/block[7]/lineArea/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/inlineparent/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[7]/lineArea/inlineparent/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[7]/lineArea/inlineparent/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[7]/lineArea/inlineparent/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[7]/lineArea/inlineparent/@padding-start"/>
+    <eval expected="16000" xpath="//flow/block[7]/lineArea/leader/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[7]/lineArea/leader/@ipda"/>
+    <eval expected="7616" xpath="//flow/block[7]/lineArea/leader/@offset"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/leader/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/leader/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/leader/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[7]/lineArea/leader/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea/leader/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea/leader/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea/leader/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[7]/lineArea/leader/@padding-start"/>
+
+    <eval expected="11100" xpath="//flow/block[8]/lineArea/@bpd"/>
+    <eval expected="360000" xpath="//flow/block[8]/lineArea/@ipd"/>
+    <eval expected="16000" xpath="//flow/block[8]/lineArea/leader/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[8]/lineArea/leader/@ipda"/>
+    <eval expected="7616" xpath="//flow/block[8]/lineArea/leader/@offset"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[8]/lineArea/leader/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[8]/lineArea/leader/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[8]/lineArea/leader/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[8]/lineArea/leader/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea/leader/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea/leader/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea/leader/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[8]/lineArea/leader/@padding-start"/>
+
+    <eval expected="11100" xpath="//flow/block[9]/lineArea/@bpd"/>
+    <eval expected="360000" xpath="//flow/block[9]/lineArea/@ipd"/>
+    <eval expected="16000" xpath="//flow/block[9]/lineArea/space/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[9]/lineArea/space/@ipda"/>
+    <eval expected="8615" xpath="//flow/block[9]/lineArea/space/@offset"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[9]/lineArea/space/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[9]/lineArea/space/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[9]/lineArea/space/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[9]/lineArea/space/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[9]/lineArea/space/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[9]/lineArea/space/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[9]/lineArea/space/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[9]/lineArea/space/@padding-start"/>
+
+    <eval expected="11100" xpath="//flow/block[11]/lineArea/@bpd"/>
+    <eval expected="360000" xpath="//flow/block[11]/lineArea/@ipd"/>
+    <eval expected="24000" xpath="//flow/block[11]/lineArea/inlineparent/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[11]/lineArea/inlineparent/@ipda"/>
+    <eval expected="5280" xpath="//flow/block[11]/lineArea/inlineparent/@offset"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[11]/lineArea/inlineparent/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[11]/lineArea/inlineparent/@padding-start"/>
 
-    <eval expected="11100" xpath="//flow/block[10]/lineArea/@bpd"/>
-    <eval expected="360000" xpath="//flow/block[10]/lineArea/@ipd"/>
-    <eval expected="16000" xpath="//flow/block[10]/lineArea/leader/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[10]/lineArea/leader/@ipda"/>
-    <eval expected="7616" xpath="//flow/block[10]/lineArea/leader/@offset"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[10]/lineArea/leader/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[10]/lineArea/leader/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[10]/lineArea/leader/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[10]/lineArea/leader/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[10]/lineArea/leader/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[10]/lineArea/leader/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[10]/lineArea/leader/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[10]/lineArea/leader/@padding-start"/>
+    <eval expected="11100" xpath="//flow/block[12]/lineArea/@bpd"/>
+    <eval expected="360000" xpath="//flow/block[12]/lineArea/@ipd"/>
+    <eval expected="24000" xpath="//flow/block[12]/lineArea/leader/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[12]/lineArea/leader/@ipda"/>
+    <eval expected="7616" xpath="//flow/block[12]/lineArea/leader/@offset"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[12]/lineArea/leader/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[12]/lineArea/leader/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[12]/lineArea/leader/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[12]/lineArea/leader/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[12]/lineArea/leader/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[12]/lineArea/leader/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[12]/lineArea/leader/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[12]/lineArea/leader/@padding-start"/>
 
     <eval expected="11100" xpath="//flow/block[13]/lineArea/@bpd"/>
     <eval expected="360000" xpath="//flow/block[13]/lineArea/@ipd"/>
-    <eval expected="16000" xpath="//flow/block[13]/lineArea/leader/@ipd"/>
+    <eval expected="24000" xpath="//flow/block[13]/lineArea/leader/@ipd"/>
     <eval expected="36000" xpath="//flow/block[13]/lineArea/leader/@ipda"/>
     <eval expected="7616" xpath="//flow/block[13]/lineArea/leader/@offset"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[13]/lineArea/leader/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[13]/lineArea/leader/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[13]/lineArea/leader/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[13]/lineArea/leader/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[13]/lineArea/leader/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[13]/lineArea/leader/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[13]/lineArea/leader/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[13]/lineArea/leader/@padding-start"/>
-
-    <eval expected="11100" xpath="//flow/block[16]/lineArea/@bpd"/>
-    <eval expected="360000" xpath="//flow/block[16]/lineArea/@ipd"/>
-    <eval expected="16000" xpath="//flow/block[16]/lineArea/space/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[16]/lineArea/space/@ipda"/>
-    <eval expected="8615" xpath="//flow/block[16]/lineArea/space/@offset"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[16]/lineArea/space/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[16]/lineArea/space/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[16]/lineArea/space/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[16]/lineArea/space/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[16]/lineArea/space/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[16]/lineArea/space/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[16]/lineArea/space/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[16]/lineArea/space/@padding-start"/>
-
-    <eval expected="11100" xpath="//flow/block[22]/lineArea/@bpd"/>
-    <eval expected="360000" xpath="//flow/block[22]/lineArea/@ipd"/>
-    <eval expected="24000" xpath="//flow/block[22]/lineArea/inlineparent/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[22]/lineArea/inlineparent/@ipda"/>
-    <eval expected="5280" xpath="//flow/block[22]/lineArea/inlineparent/@offset"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[22]/lineArea/inlineparent/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[22]/lineArea/inlineparent/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[22]/lineArea/inlineparent/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[22]/lineArea/inlineparent/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[22]/lineArea/inlineparent/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[22]/lineArea/inlineparent/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[22]/lineArea/inlineparent/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[22]/lineArea/inlineparent/@padding-start"/>
-
-    <eval expected="11100" xpath="//flow/block[25]/lineArea/@bpd"/>
-    <eval expected="360000" xpath="//flow/block[25]/lineArea/@ipd"/>
-    <eval expected="24000" xpath="//flow/block[25]/lineArea/leader/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[25]/lineArea/leader/@ipda"/>
-    <eval expected="7616" xpath="//flow/block[25]/lineArea/leader/@offset"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[25]/lineArea/leader/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[25]/lineArea/leader/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[25]/lineArea/leader/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[25]/lineArea/leader/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[25]/lineArea/leader/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[25]/lineArea/leader/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[25]/lineArea/leader/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[25]/lineArea/leader/@padding-start"/>
-
-    <eval expected="11100" xpath="//flow/block[28]/lineArea/@bpd"/>
-    <eval expected="360000" xpath="//flow/block[28]/lineArea/@ipd"/>
-    <eval expected="24000" xpath="//flow/block[28]/lineArea/leader/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[28]/lineArea/leader/@ipda"/>
-    <eval expected="7616" xpath="//flow/block[28]/lineArea/leader/@offset"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[28]/lineArea/leader/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[28]/lineArea/leader/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[28]/lineArea/leader/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[28]/lineArea/leader/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[28]/lineArea/leader/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[28]/lineArea/leader/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[28]/lineArea/leader/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[28]/lineArea/leader/@padding-start"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[13]/lineArea/leader/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[13]/lineArea/leader/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[13]/lineArea/leader/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[13]/lineArea/leader/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[13]/lineArea/leader/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[13]/lineArea/leader/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[13]/lineArea/leader/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[13]/lineArea/leader/@padding-start"/>
 
-    <eval expected="11100" xpath="//flow/block[31]/lineArea/@bpd"/>
-    <eval expected="360000" xpath="//flow/block[31]/lineArea/@ipd"/>
-    <eval expected="24000" xpath="//flow/block[31]/lineArea/space/@ipd"/>
-    <eval expected="36000" xpath="//flow/block[31]/lineArea/space/@ipda"/>
-    <eval expected="8615" xpath="//flow/block[31]/lineArea/space/@offset"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[31]/lineArea/space/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[31]/lineArea/space/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[31]/lineArea/space/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[31]/lineArea/space/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[31]/lineArea/space/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[31]/lineArea/space/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[31]/lineArea/space/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[31]/lineArea/space/@padding-start"/>
+    <eval expected="11100" xpath="//flow/block[14]/lineArea/@bpd"/>
+    <eval expected="360000" xpath="//flow/block[14]/lineArea/@ipd"/>
+    <eval expected="24000" xpath="//flow/block[14]/lineArea/space/@ipd"/>
+    <eval expected="36000" xpath="//flow/block[14]/lineArea/space/@ipda"/>
+    <eval expected="8615" xpath="//flow/block[14]/lineArea/space/@offset"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[14]/lineArea/space/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[14]/lineArea/space/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[14]/lineArea/space/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[14]/lineArea/space/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[14]/lineArea/space/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[14]/lineArea/space/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[14]/lineArea/space/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[14]/lineArea/space/@padding-start"/>
   </checks>
 </testcase>
index 88bd983b1a5a8d2f1a5a260dabcfae3196553c0c..c26d2a2bc342130271f16ecad4d6026c67d12d1d 100644 (file)
     <eval expected="360000" xpath="//flow/@ipd"/>
     
     <!-- spacer block for space-before on list-block -->
-    <eval expected="5000" xpath="//flow/block[2]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[2]/@space-before"/>
     
     <!-- list-block -->
-    <eval expected="360000" xpath="//flow/block[3]/@ipda"/>
-    <eval expected="340000" xpath="//flow/block[3]/@ipd"/>
-    <!--eval expected="??" xpath="//flow/block[3]/@bpda"/>
-    <eval expected="??" xpath="//flow/block[3]/@bpd"/-->
-    <eval expected="10000 10000 10000 10000" xpath="//flow/block[3]/@bap"/>
-    <eval expected="5000" xpath="//flow/block[3]/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[3]/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[3]/@padding-start"/>
-    <eval expected="5000" xpath="//flow/block[3]/@padding-end"/>
-    <eval expected="10000" xpath="//flow/block[3]/@start-indent"/>
-    <eval expected="10000" xpath="//flow/block[3]/@end-indent"/>
+    <eval expected="360000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="340000" xpath="//flow/block[2]/@ipd"/>
+    <!--eval expected="??" xpath="//flow/block[2]/@bpda"/>
+    <eval expected="??" xpath="//flow/block[2]/@bpd"/-->
+    <eval expected="10000 10000 10000 10000" xpath="//flow/block[2]/@bap"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/@padding-end"/>
+    <eval expected="10000" xpath="//flow/block[2]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/@end-indent"/>
     
     <!-- first list-item -->
-    <eval expected="340000" xpath="//flow/block[3]/block[1]/@ipda"/>
-    <eval expected="340000" xpath="//flow/block[3]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/@bpd"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[1]/@start-indent"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[1]/@end-indent"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[1]/@ipda"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/@bpd"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[1]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[1]/@end-indent"/>
 
-    <eval expected="340000" xpath="//flow/block[3]/block[1]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/block[1]/@bpd"/>
-    <eval expected="40000" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@ipda"/>
-    <eval expected="40000" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@bpda"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@start-indent"/>
-    <eval expected="310000" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@end-indent"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@space-start"/>
-    <eval expected="310000" xpath="//flow/block[3]/block[1]/block[1]/block[1]/@space-end"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[1]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/block[1]/@bpd"/>
+    <eval expected="40000" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@ipda"/>
+    <eval expected="40000" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@bpda"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@start-indent"/>
+    <eval expected="310000" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@end-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@space-start"/>
+    <eval expected="310000" xpath="//flow/block[2]/block[1]/block[1]/block[1]/@space-end"/>
     
-    <eval expected="340000" xpath="//flow/block[3]/block[1]/block[2]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/block[2]/@bpd"/>
-    <eval expected="290000" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@ipda"/>
-    <eval expected="280000" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@bpda"/>
-    <eval expected="65000" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@start-indent"/>
-    <eval expected="15000" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@end-indent"/>
-    <eval expected="60000" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@space-start"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[1]/block[2]/block[1]/@space-end"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[1]/block[2]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/block[2]/@bpd"/>
+    <eval expected="290000" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@ipda"/>
+    <eval expected="280000" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@bpda"/>
+    <eval expected="65000" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@start-indent"/>
+    <eval expected="15000" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@end-indent"/>
+    <eval expected="60000" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@space-start"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[1]/block[2]/block[1]/@space-end"/>
     
     <!-- spacer block for space-before on second list-item -->
-    <eval expected="5000" xpath="//flow/block[3]/block[2]/@bpd"/>
+    <eval expected="5000" xpath="//flow/block[2]/block[2]/@space-before"/>
 
     <!-- second list-item -->
-    <eval expected="340000" xpath="//flow/block[3]/block[3]/@ipda"/>
-    <eval expected="340000" xpath="//flow/block[3]/block[3]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/@bpd"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[3]/@start-indent"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[3]/@end-indent"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[2]/@ipda"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[2]/@ipd"/>
+    <eval expected="29400" xpath="//flow/block[2]/block[2]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/@bpd"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/@start-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/@end-indent"/>
 
-    <eval expected="340000" xpath="//flow/block[3]/block[3]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/block[1]/@bpd"/>
-    <eval expected="40000" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@ipda"/>
-    <eval expected="40000" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@bpda"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@start-indent"/>
-    <eval expected="310000" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@end-indent"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@space-start"/>
-    <eval expected="310000" xpath="//flow/block[3]/block[3]/block[1]/block[1]/@space-end"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[2]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/block[1]/@bpd"/>
+    <eval expected="40000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@ipda"/>
+    <eval expected="40000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@bpda"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@start-indent"/>
+    <eval expected="310000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@end-indent"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@space-start"/>
+    <eval expected="310000" xpath="//flow/block[2]/block[2]/block[1]/block[1]/@space-end"/>
     
-    <eval expected="340000" xpath="//flow/block[3]/block[3]/block[2]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/block[2]/@bpd"/>
-    <eval expected="295000" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@ipda"/>
-    <eval expected="285000" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@bpda"/>
-    <eval expected="60000" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@start-indent"/>
-    <eval expected="15000" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@end-indent"/>
-    <eval expected="55000" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@space-start"/>
-    <eval expected="10000" xpath="//flow/block[3]/block[3]/block[2]/block[1]/@space-end"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[2]/block[2]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/block[2]/@bpd"/>
+    <eval expected="295000" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@ipda"/>
+    <eval expected="285000" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@bpda"/>
+    <eval expected="60000" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@start-indent"/>
+    <eval expected="15000" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@end-indent"/>
+    <eval expected="55000" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@space-start"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/block[2]/block[1]/@space-end"/>
 
     <!-- spacer block for space-after on second list-item -->
-    <eval expected="10000" xpath="//flow/block[3]/block[4]/@bpd"/>
+    <eval expected="10000" xpath="//flow/block[2]/block[2]/@space-after"/>
 
     <!-- third list-item -->
-    <eval expected="340000" xpath="//flow/block[3]/block[5]/@ipda"/>
-    <eval expected="320000" xpath="//flow/block[3]/block[5]/@ipd"/>
-    <eval expected="34400" xpath="//flow/block[3]/block[5]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[5]/@bpd"/>
-    <eval expected="10000 10000 10000 10000" xpath="//flow/block[3]/block[5]/@bap"/>
-    <eval expected="5000" xpath="//flow/block[3]/block[5]/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[3]/block[5]/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[3]/block[5]/@padding-start"/>
-    <eval expected="5000" xpath="//flow/block[3]/block[5]/@padding-end"/>
-    <eval expected="20000" xpath="//flow/block[3]/block[5]/@start-indent"/>
-    <eval expected="20000" xpath="//flow/block[3]/block[5]/@end-indent"/>
+    <eval expected="340000" xpath="//flow/block[2]/block[3]/@ipda"/>
+    <eval expected="320000" xpath="//flow/block[2]/block[3]/@ipd"/>
+    <eval expected="34400" xpath="//flow/block[2]/block[3]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/@bpd"/>
+    <eval expected="10000 10000 10000 10000" xpath="//flow/block[2]/block[3]/@bap"/>
+    <eval expected="5000" xpath="//flow/block[2]/block[3]/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[2]/block[3]/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[2]/block[3]/@padding-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/block[3]/@padding-end"/>
+    <eval expected="20000" xpath="//flow/block[2]/block[3]/@start-indent"/>
+    <eval expected="20000" xpath="//flow/block[2]/block[3]/@end-indent"/>
 
-    <eval expected="320000" xpath="//flow/block[3]/block[5]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[5]/block[1]/@bpd"/>
-    <eval expected="40000" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@ipda"/>
-    <eval expected="40000" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@bpda"/>
-    <eval expected="20000" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@start-indent"/>
-    <eval expected="300000" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@end-indent"/>
-    <eval expected="20000" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@space-start"/>
-    <eval expected="300000" xpath="//flow/block[3]/block[5]/block[1]/block[1]/@space-end"/>
+    <eval expected="320000" xpath="//flow/block[2]/block[3]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/block[1]/@bpd"/>
+    <eval expected="40000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@ipda"/>
+    <eval expected="40000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@bpda"/>
+    <eval expected="20000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@start-indent"/>
+    <eval expected="300000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@end-indent"/>
+    <eval expected="20000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@space-start"/>
+    <eval expected="300000" xpath="//flow/block[2]/block[3]/block[1]/block[1]/@space-end"/>
     
-    <eval expected="320000" xpath="//flow/block[3]/block[5]/block[2]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[5]/block[2]/@bpd"/>
-    <eval expected="280000" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@ipda"/>
-    <eval expected="270000" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@bpda"/>
-    <eval expected="14400" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@bpda"/>
-    <eval expected="70000" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@start-indent"/>
-    <eval expected="20000" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@end-indent"/>
-    <eval expected="65000" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@space-start"/>
-    <eval expected="15000" xpath="//flow/block[3]/block[5]/block[2]/block[1]/@space-end"/>
+    <eval expected="320000" xpath="//flow/block[2]/block[3]/block[2]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/block[2]/@bpd"/>
+    <eval expected="280000" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@ipda"/>
+    <eval expected="270000" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@bpda"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@bpda"/>
+    <eval expected="70000" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@start-indent"/>
+    <eval expected="20000" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@end-indent"/>
+    <eval expected="65000" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@space-start"/>
+    <eval expected="15000" xpath="//flow/block[2]/block[3]/block[2]/block[1]/@space-end"/>
 
     <!-- spacer block for space-after on list-block -->
-    <eval expected="10000" xpath="//flow/block[4]/@bpd"/>
+    <eval expected="10000" xpath="//flow/block[2]/@space-after"/>
     
   </checks>
 </testcase>
diff --git a/test/layoutengine/testcases/list-block_space-before_space-after_1.xml b/test/layoutengine/testcases/list-block_space-before_space-after_1.xml
new file mode 100644 (file)
index 0000000..82af9d2
--- /dev/null
@@ -0,0 +1,221 @@
+<?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 spaces on tables.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1.7in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="retain">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:list-block provisional-distance-between-starts="8pt" provisional-label-separation="5pt" 
+              space-before="20pt" space-before.conditionality="retain" 
+              space-after="10pt" space-after.conditionality="retain">
+            <fo:list-item space-before="1em">
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+                </fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+            <fo:list-item>
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block>here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+          </fo:list-block>
+          <fo:block space-before.optimum="10pt" space-before.conditionality="retain" space-after.optimum="20pt" space-after.conditionality="retain">
+Two blocks, testing conditionality="retain".
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="discard">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:list-block provisional-distance-between-starts="8pt" provisional-label-separation="5pt" 
+              space-before="20pt" space-before.conditionality="discard" 
+              space-after="10pt" space-after.conditionality="discard">
+            <fo:list-item space-before="1em">
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+                </fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+            <fo:list-item>
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block>here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+          </fo:list-block>
+          <fo:block space-before.optimum="10pt" space-before.conditionality="discard" space-after.optimum="20pt" space-after.conditionality="discard">
+Two blocks, testing conditionality="discard".
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="retain">
+      <box w="0"/> <!-- Helper box bearing the SpaceHandlingPosition and making sure the glue gets processed -->
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="28800"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="14400"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="14400"/>
+      
+      <!-- skip three more lines -->
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="28800"/> <!-- end of first list item -->
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="14400"/> <!-- second list-item -->
+      
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-10000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="0"/> <!-- This is used to make sure the preceding glue is not cut off -->
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="discard">
+      <box w="0"/> <!-- Helper box used to notify the LM for the addAreas stage about the discarded spaces -->
+      <box w="28800"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="28800"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <glue w="10000"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0"/> <!-- SpaceHandlingPosition-bearing helper box -->
+      
+      <skip>3</skip>
+    </element-list>
+
+    <eval expected="4" xpath="count(//pageViewport)"/>
+    
+    <!-- 1: retain -->
+    <eval expected="20000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="10000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <!-- the following space is eliminated/collapsed through space resolution -->
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after))"/>
+    <eval expected="10000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-after"/>
+    
+    <!-- 2: discard -->
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after))"/>
+    <eval expected="10000" xpath="//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-before"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-after))"/>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/list-block_space-before_space-after_2.xml b/test/layoutengine/testcases/list-block_space-before_space-after_2.xml
new file mode 100644 (file)
index 0000000..293faeb
--- /dev/null
@@ -0,0 +1,114 @@
+<?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 lists. Checks space-before and space-after on list-block.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="2in" 
+              margin="20pt">
+          <fo:region-body background-color="yellow"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block>test</fo:block>
+          <fo:list-block provisional-distance-between-starts="50pt" provisional-label-separation="5pt">
+            <fo:list-item space-before="1em">
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block>here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+            <fo:list-item space-before="1em">
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block>here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+            <fo:list-item space-before="1em" space-after="1em">
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block>here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+            <fo:list-item space-after="1em">
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block>here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+            <fo:list-item>
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block>•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block>here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+          </fo:list-block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <eval expected="2" xpath="count(//pageViewport)"/>
+    <element-list category="breaker">
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="12000"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="12000"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="12000"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="12000"/>
+      <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="12000"/>
+      <box w="14400"/>
+      
+      <skip>3</skip>
+    </element-list>
+  </checks>
+</testcase>
index 31aea6eccc404cb3e6abd84afd858c6e45f6d7f1..6e55cf0083dc70db33158467388c0a7af9600a44 100644 (file)
     <eval expected="2" xpath="count(//pageViewport)"/>
     <element-list category="breaker">
       <box w="14400"/>
+      
       <penalty w="0" p="0"/>
+      
       <glue w="12000"/>
       <box w="14400"/>
+      
       <penalty w="0" p="0"/>
+      
       <glue w="12000"/>
       <box w="14400"/>
+      
       <penalty w="0" p="0"/>
+      
       <glue w="12000"/>
       <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
       <glue w="12000"/>
       <box w="14400"/>
+      
+      <penalty w="0" p="0"/>
+      
       <glue w="12000"/>
       <box w="14400"/>
+      
       <skip>3</skip>
     </element-list>
   </checks>
index 855046352ac31b6dbcb01266d3803d694f8f215e..15e50132443258c3316dcba4c496f0ac1c63f6b7 100644 (file)
       instead of optimum and the addAreas stage doesn't create smaller space-before/after 
       spacers. -->
     
+    <!-- We don't check the exact effective space-before value, but simply make sure it's smaller than 12pt=1em in this test case -->
+    <true xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/block[1]/@space-before &lt; 12000"/>
+    
     <element-list category="breaker">
       <box w="14400"/>
+      
       <penalty w="0" p="0"/>
-      <glue w="12000"/> <!-- TODO Check shrink/stretch -->
+      
+      <glue w="12000" y="0" z="12000"/>
       <box w="14400"/>
+      
       <penalty w="0" p="0"/>
-      <glue w="12000"/>
+      
+      <glue w="12000"  y="0" z="12000"/>
       <box w="14400"/>
+      
       <penalty w="0" p="0"/>
-      <glue w="12000"/>
+      
+      <glue w="12000" y="0" z="12000"/>
       <box w="14400"/>
-      <glue w="12000"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="12000" y="0" z="12000"/>
       <box w="14400"/>
-      <glue w="12000"/>
+      
+      <penalty w="0" p="0"/>
+      
+      <glue w="12000" y="0" z="12000"/>
       <box w="14400"/>
+      
       <skip>3</skip>
     </element-list>
   </checks>
diff --git a/test/layoutengine/testcases/list-item_space-before_space-after_3.xml b/test/layoutengine/testcases/list-item_space-before_space-after_3.xml
new file mode 100644 (file)
index 0000000..6b8a81a
--- /dev/null
@@ -0,0 +1,73 @@
+<?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 lists. Checks spaces inside list-item content.
+    </p>
+    <p>
+      Some additional code is notify the LMs about the effective spaces, otherwise discardable spaces don't get discarded.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="2in" 
+              margin="20pt">
+          <fo:region-body background-color="yellow"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:list-block provisional-distance-between-starts="50pt" provisional-label-separation="5pt">
+            <fo:list-item space-before="1em">
+              <fo:list-item-label end-indent="label-end()">
+                <fo:block space-before="1em">•</fo:block>
+              </fo:list-item-label>
+              <fo:list-item-body start-indent="body-start()">
+                <fo:block space-before="1em">here is text in the list item body</fo:block>
+              </fo:list-item-body>
+            </fo:list-item>
+          </fo:list-block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="list-item-label">
+      <box w="0"/> <!-- Starting SpaceHandlingPosition -->
+      <box w="14400"/>
+    </element-list>
+    <element-list category="list-item-body">
+      <box w="0"/> <!-- Starting SpaceHandlingPosition -->
+      <box w="14400"/>
+    </element-list>
+    <element-list category="breaker">
+      <box w="0"/> <!-- Starting SpaceHandlingPosition -->
+      <box w="14400"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <true xpath="not(boolean(//flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/block[1]/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/block[2]/@space-before))"/>
+    <true xpath="not(boolean(//flow/block[1]/block[1]/block[2]/block[1]/@space-before))"/>
+  </checks>
+</testcase>
index 3fa18cd286b6ec9982c570482b8f0e6115a3eec5..cc1797f8451e95fa12d9e0228f79b512f6f68e64 100644 (file)
       </fo:layout-master-set>
       <fo:page-sequence master-reference="simple">
         <fo:flow flow-name="xsl-region-body">
-          <fo:block line-height="10pt" space-before.optimum="5cm" 
+          <fo:block-container height="5cm">
+            <fo:block/>
+          </fo:block-container>
+          <fo:block line-height="10pt"
             white-space-collapse="false" white-space-treatment="preserve" linefeed-treatment="preserve" wrap-option="no-wrap">
 <![CDATA[<!-- list level 1 -->
 <fo:list-block provisional-distance-between-starts="0.4cm"
index 7512c1e94dd6f7adc6dfe489f05d07b76938ab12..ed65a507cd63e7a358cdfc297fb191575afd6700 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="7180" xpath="//flow/block[1]/lineArea/text[2]/@baseline"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea/text[2]/@offset"/>
+    <eval expected="5560" xpath="//flow/block[1]/lineArea/text[2]/@ipd"/>
+    <eval expected="7560" xpath="//flow/block[1]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-start"/>
+
     <eval expected="7180" xpath="//flow/block[2]/lineArea/text[2]/@baseline"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea/text[2]/@offset"/>
     <eval expected="5560" xpath="//flow/block[2]/lineArea/text[2]/@ipd"/>
-    <eval expected="7560" xpath="//flow/block[2]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-start"/>
-
-    <eval expected="7180" xpath="//flow/block[5]/lineArea/text[2]/@baseline"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea/text[2]/@offset"/>
-    <eval expected="5560" xpath="//flow/block[5]/lineArea/text[2]/@ipd"/>
-    <eval expected="25560" xpath="//flow/block[5]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-start"/>
+    <eval expected="25560" xpath="//flow/block[2]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-start"/>
 
-    <eval expected="7180" xpath="//flow/block[8]/lineArea/text[2]/@baseline"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea/text[2]/@offset"/>
-    <eval expected="5560" xpath="//flow/block[8]/lineArea/text[2]/@ipd"/>
-    <eval expected="17560" xpath="//flow/block[8]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[8]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[8]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[8]/lineArea/text[2]/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea/text[2]/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea/text[2]/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea/text[2]/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[8]/lineArea/text[2]/@padding-start"/>
+    <eval expected="7180" xpath="//flow/block[3]/lineArea/text[2]/@baseline"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea/text[2]/@offset"/>
+    <eval expected="5560" xpath="//flow/block[3]/lineArea/text[2]/@ipd"/>
+    <eval expected="17560" xpath="//flow/block[3]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[3]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[3]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[3]/lineArea/text[2]/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea/text[2]/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea/text[2]/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[3]/lineArea/text[2]/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[3]/lineArea/text[2]/@padding-start"/>
 
-    <eval expected="5744" xpath="//flow/block[11]/lineArea/text[2]/@baseline"/>
-    <eval expected="8616" xpath="//flow/block[11]/lineArea/text[2]/@offset"/>
-    <eval expected="4448" xpath="//flow/block[11]/lineArea/text[2]/@ipd"/>
-    <eval expected="24448" xpath="//flow/block[11]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-start"/>
+    <eval expected="5744" xpath="//flow/block[4]/lineArea/text[2]/@baseline"/>
+    <eval expected="8616" xpath="//flow/block[4]/lineArea/text[2]/@offset"/>
+    <eval expected="4448" xpath="//flow/block[4]/lineArea/text[2]/@ipd"/>
+    <eval expected="24448" xpath="//flow/block[4]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-start"/>
   </checks>
 </testcase>
index be9bbb7070fef25dd0821448b631d5fdde3c716d..b8f5315a14473bd3172230b80a94e2c75417278c 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="7180" xpath="//flow/block[1]/lineArea/text[2]/@offset"/>
     <eval expected="7180" xpath="//flow/block[2]/lineArea/text[2]/@offset"/>
-    <eval expected="7180" xpath="//flow/block[5]/lineArea/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea/text[2]/@offset"/>
-    <eval expected="4565" xpath="//flow/block[11]/lineArea/text[2]/@offset"/>
-    <eval expected="9250" xpath="//flow/block[14]/lineArea/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea/text[2]/@offset"/>
+    <eval expected="4565" xpath="//flow/block[4]/lineArea/text[2]/@offset"/>
+    <eval expected="9250" xpath="//flow/block[5]/lineArea/text[2]/@offset"/>
   </checks>
 </testcase>
index c099d1c1e901eba0d52e910b9c03fc81b3167537..cffa2eda1c2787659b5b78097c3ec2eb5b2c4d5a 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="7180" xpath="//flow/block[1]/lineArea/text[2]/@baseline"/>
+    <eval expected="0" xpath="//flow/block[1]/lineArea/text[2]/@offset"/>
+    <eval expected="5560" xpath="//flow/block[1]/lineArea/text[2]/@ipd"/>
+    <eval expected="7560" xpath="//flow/block[1]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[1]/lineArea/text[2]/@border-start"/>
+
     <eval expected="7180" xpath="//flow/block[2]/lineArea/text[2]/@baseline"/>
     <eval expected="0" xpath="//flow/block[2]/lineArea/text[2]/@offset"/>
     <eval expected="5560" xpath="//flow/block[2]/lineArea/text[2]/@ipd"/>
-    <eval expected="7560" xpath="//flow/block[2]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[2]/lineArea/text[2]/@border-start"/>
-
-    <eval expected="7180" xpath="//flow/block[5]/lineArea/text[2]/@baseline"/>
-    <eval expected="0" xpath="//flow/block[5]/lineArea/text[2]/@offset"/>
-    <eval expected="5560" xpath="//flow/block[5]/lineArea/text[2]/@ipd"/>
-    <eval expected="25560" xpath="//flow/block[5]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[5]/lineArea/text[2]/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[5]/lineArea/text[2]/@padding-start"/>
+    <eval expected="25560" xpath="//flow/block[2]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[2]/lineArea/text[2]/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[2]/lineArea/text[2]/@padding-start"/>
 
-    <eval expected="7180" xpath="//flow/block[8]/lineArea/text[2]/@baseline"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea/text[2]/@offset"/>
-    <eval expected="5560" xpath="//flow/block[8]/lineArea/text[2]/@ipd"/>
-    <eval expected="17560" xpath="//flow/block[8]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[8]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[8]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[8]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[8]/lineArea/text[2]/@border-start"/>
-    <eval expected="3000" xpath="//flow/block[8]/lineArea/text[2]/@padding-after"/>
-    <eval expected="1000" xpath="//flow/block[8]/lineArea/text[2]/@padding-before"/>
-    <eval expected="2000" xpath="//flow/block[8]/lineArea/text[2]/@padding-end"/>
-    <eval expected="4000" xpath="//flow/block[8]/lineArea/text[2]/@padding-start"/>
+    <eval expected="7180" xpath="//flow/block[3]/lineArea/text[2]/@baseline"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea/text[2]/@offset"/>
+    <eval expected="5560" xpath="//flow/block[3]/lineArea/text[2]/@ipd"/>
+    <eval expected="17560" xpath="//flow/block[3]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,3000)" xpath="//flow/block[3]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,1000)" xpath="//flow/block[3]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,2000)" xpath="//flow/block[3]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,4000)" xpath="//flow/block[3]/lineArea/text[2]/@border-start"/>
+    <eval expected="3000" xpath="//flow/block[3]/lineArea/text[2]/@padding-after"/>
+    <eval expected="1000" xpath="//flow/block[3]/lineArea/text[2]/@padding-before"/>
+    <eval expected="2000" xpath="//flow/block[3]/lineArea/text[2]/@padding-end"/>
+    <eval expected="4000" xpath="//flow/block[3]/lineArea/text[2]/@padding-start"/>
 
-    <eval expected="5744" xpath="//flow/block[11]/lineArea/text[2]/@baseline"/>
-    <eval expected="8616" xpath="//flow/block[11]/lineArea/text[2]/@offset"/>
-    <eval expected="4448" xpath="//flow/block[11]/lineArea/text[2]/@ipd"/>
-    <eval expected="24448" xpath="//flow/block[11]/lineArea/text[2]/@ipda"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-after"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-before"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-end"/>
-    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[11]/lineArea/text[2]/@border-start"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-after"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-before"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-end"/>
-    <eval expected="5000" xpath="//flow/block[11]/lineArea/text[2]/@padding-start"/>
+    <eval expected="5744" xpath="//flow/block[4]/lineArea/text[2]/@baseline"/>
+    <eval expected="8616" xpath="//flow/block[4]/lineArea/text[2]/@offset"/>
+    <eval expected="4448" xpath="//flow/block[4]/lineArea/text[2]/@ipd"/>
+    <eval expected="24448" xpath="//flow/block[4]/lineArea/text[2]/@ipda"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-after"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-before"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-end"/>
+    <eval expected="(solid,#ff0000,5000)" xpath="//flow/block[4]/lineArea/text[2]/@border-start"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-after"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-before"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-end"/>
+    <eval expected="5000" xpath="//flow/block[4]/lineArea/text[2]/@padding-start"/>
   </checks>
 </testcase>
index f436bbd309fe109a259352d87af898066c8cfa1a..a4605027ab67394d6e28563f2aaabc76453c9d7e 100755 (executable)
     </fo:root>
   </fo>
   <checks>
+    <eval expected="7180" xpath="//flow/block[1]/lineArea/text[2]/@offset"/>
     <eval expected="7180" xpath="//flow/block[2]/lineArea/text[2]/@offset"/>
-    <eval expected="7180" xpath="//flow/block[5]/lineArea/text[2]/@offset"/>
-    <eval expected="0" xpath="//flow/block[8]/lineArea/text[2]/@offset"/>
-    <eval expected="4565" xpath="//flow/block[11]/lineArea/text[2]/@offset"/>
-    <eval expected="9250" xpath="//flow/block[14]/lineArea/text[2]/@offset"/>
+    <eval expected="0" xpath="//flow/block[3]/lineArea/text[2]/@offset"/>
+    <eval expected="4565" xpath="//flow/block[4]/lineArea/text[2]/@offset"/>
+    <eval expected="9250" xpath="//flow/block[5]/lineArea/text[2]/@offset"/>
   </checks>
 </testcase>
diff --git a/test/layoutengine/testcases/region_side_space-resolution.xml b/test/layoutengine/testcases/region_side_space-resolution.xml
new file mode 100644 (file)
index 0000000..912fa6e
--- /dev/null
@@ -0,0 +1,63 @@
+<?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 if space resolution works in side regions.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+          <fo:region-body margin-top="50pt"/>
+          <fo:region-before extent="50pt" background-color="yellow"/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:static-content flow-name="xsl-region-before">
+          <fo:block space-before="1em" space-after="1em">line 1</fo:block>
+          <fo:block space-before="1em" space-after="1em">line 2</fo:block>
+        </fo:static-content>
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block>region-body</fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="static-content" id="xsl-region-before">
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      <box w="14400"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="12000"/>
+      
+      <box w="14400"/>
+      
+      <box w="0"/> <!-- SpaceHandlingPosition -->
+      <skip>3</skip>
+    </element-list>
+
+    <true xpath="not(boolean(//regionBefore/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//regionBefore/block[1]/@space-after))"/>
+    <eval expected="12000" xpath="//regionBefore/block[2]/@space-before"/>
+    <true xpath="not(boolean(//regionBefore/block[2]/@space-after))"/>
+  </checks>
+</testcase>
index d791e965f7586405afe97f993c49e8618eeeca68..18a041c20047eb04fa9f9ceddc4a6b57e3e44cfc 100644 (file)
     <true xpath="//flow/block[1]/block[1]/@is-reference-area"/>
     <eval expected="144000" xpath="//flow/block[1]/block[1]/@ipd"/>
     <eval expected="43200" xpath="//flow/block[1]/block[1]/@bpd"/>
-    <eval expected="115200" xpath="//flow/block[1]/block[1]/block[2]/@ipd"/>
-    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[2]/@bpd"/>
-    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[2]/@start-indent"/>
-    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[2]/@space-start"/>
-    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[2]/@end-indent"/>
-    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[2]/@space-end"/>
+    <eval expected="115200" xpath="//flow/block[1]/block[1]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[1]/@bpd"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[1]/@space-before"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[1]/@space-after"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[1]/@start-indent"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[1]/@space-start"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[1]/@end-indent"/>
+    <eval expected="14400" xpath="//flow/block[1]/block[1]/block[1]/@space-end"/>
 
     <!-- cell 2 -->
     <true xpath="//flow/block[1]/block[2]/@is-reference-area"/>
diff --git a/test/layoutengine/testcases/table-cell_border_padding_conditionality.xml b/test/layoutengine/testcases/table-cell_border_padding_conditionality.xml
new file mode 100644 (file)
index 0000000..f3a1892
--- /dev/null
@@ -0,0 +1,128 @@
+<?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 border and padding conditionality on table.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="2in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="retain">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%" border-collapse="separate" border-spacing="5pt">
+            <fo:table-column column-width="proportional-column-width(1)"/>
+            <fo:table-column column-width="proportional-column-width(9)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell background-color="yellow"
+                    padding-before="20pt" padding-before.conditionality="retain" 
+                    padding-after="20pt" padding-after.conditionality="retain" 
+                    border-before-style="solid" border-before-width="5pt" border-before-width.conditionality="retain"
+                    border-after-style="solid" border-after-width="5pt" border-after-width.conditionality="retain">
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell background-color="orange"
+                    padding-before="20pt" padding-before.conditionality="retain" 
+                    padding-after="20pt" padding-after.conditionality="retain" 
+                    border-before-style="solid" border-before-width="5pt" border-before-width.conditionality="retain"
+                    border-after-style="solid" border-after-width="5pt" border-after-width.conditionality="retain">
+                  <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+                  </fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="discard">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%" border-collapse="separate" border-spacing="5pt">
+            <fo:table-column column-width="proportional-column-width(1)"/>
+            <fo:table-column column-width="proportional-column-width(9)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell background-color="yellow"
+                    padding-before="20pt" padding-before.conditionality="discard" 
+                    padding-after="20pt" padding-after.conditionality="discard" 
+                    border-before-style="solid" border-before-width="5pt" border-before-width.conditionality="discard"
+                    border-after-style="solid" border-after-width="5pt" border-after-width.conditionality="discard">
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell background-color="orange"
+                    padding-before="20pt" padding-before.conditionality="discard" 
+                    padding-after="20pt" padding-after.conditionality="discard" 
+                    border-before-style="solid" border-before-width="5pt" border-before-width.conditionality="discard"
+                    border-after-style="solid" border-after-width="5pt" border-after-width.conditionality="discard">
+                  <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+                  </fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <!-- retain case -->
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-before"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-after"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-before"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-after"/>
+
+    <!-- discard case -->
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-before"/>
+    
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-after))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-after))"/>
+
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-before))"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@border-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/@padding-after"/>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/table_border_padding_2.xml b/test/layoutengine/testcases/table_border_padding_2.xml
new file mode 100644 (file)
index 0000000..cea5269
--- /dev/null
@@ -0,0 +1,203 @@
+<?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 border and padding conditionality on table.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="2in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="retain">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%" border-collapse="separate" border-spacing="5pt" 
+                padding-before="20pt" padding-before.conditionality="retain" 
+                padding-after="20pt" padding-after.conditionality="retain" 
+                border-before-style="solid" border-before-width="5pt" border-before-width.conditionality="retain"
+                border-after-style="solid" border-after-width="5pt" border-after-width.conditionality="retain">
+            <fo:table-column column-width="proportional-column-width(1)"/>
+            <fo:table-column column-width="proportional-column-width(9)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell background-color="yellow">
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell background-color="orange">
+                  <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+                  </fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="discard">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%" border-collapse="separate" border-spacing="5pt" 
+                padding-before="20pt" padding-before.conditionality="discard" 
+                padding-after="20pt" padding-after.conditionality="discard" 
+                border-before-style="solid" border-before-width="5pt" border-before-width.conditionality="discard"
+                border-after-style="solid" border-after-width="5pt" border-after-width.conditionality="discard">
+            <fo:table-column column-width="proportional-column-width(1)"/>
+            <fo:table-column column-width="proportional-column-width(9)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell background-color="yellow">
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell background-color="orange">
+                  <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+                  </fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="retain">
+      <box w="0"/> <!-- Helper box bearing the SpaceHandlingPosition and making sure the glue gets processed -->
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      
+      <box w="0"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      <penalty w="14400"/> <!-- p is not of interest here -->
+      <glue w="-50000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      
+      <box w="28800"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-50000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      
+      <box w="14400"/>
+      
+      <!-- skip three more lines -->
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-50000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      
+      <box w="28800"/> <!-- end of table -->
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      
+      <box w="0"/> <!-- This is used to make sure the preceding glue is not cut off -->
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="discard">
+      <box w="0"/> <!-- Helper box used to notify the LM for the addAreas stage about the discarded spaces -->
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      <box w="0"/>
+      <penalty w="14400"/> <!-- p is not of interest here -->
+      <box w="28800"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="28800"/>
+      
+      <box w="0"/> <!-- SpaceHandlingPosition-bearing helper box -->
+      
+      <penalty w="0" p="INF"/>
+      <glue w="25000"/>
+      <box w="0"/> <!-- This is used to make sure the preceding glue is not cut off -->
+      
+      <skip>3</skip>
+    </element-list>
+
+    <!-- retain case -->
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-before"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-after"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-before"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-after"/>
+
+    <!-- discard case -->
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-before"/>
+    
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-after))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-after))"/>
+
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-before))"/>
+
+    <eval expected="(solid,#000000,5000)" xpath="//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@border-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@padding-after"/>
+  </checks>
+</testcase>
index c1b37fafb11fcc48dfdf89e7f52a12a19e088f78..ddf51a9f2cc2991ccea51fabf0f2b8efa215f010 100644 (file)
 -->
 <!-- $Id$ -->
 <testcase>
-       <info>
-               <p>
+  <info>
+    <p>
       This test checks basic tables. Tests table spaces and margins.
     </p>
-       </info>
-       <fo>
-               <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
-                       <fo:layout-master-set>
-                               <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
-                                       <fo:region-body/>
-                               </fo:simple-page-master>
-                       </fo:layout-master-set>
-                       <fo:page-sequence master-reference="normal" white-space-collapse="true">
-                               <fo:flow flow-name="xsl-region-body">
-                                       <fo:block background-color="orange">before table</fo:block>
-                                       <fo:table table-layout="fixed" space-before="5pt" space-after="10pt" margin-left="5pt" margin-right="10pt" width="4in + 15pt" background-color="lightgray">
-                                               <fo:table-column column-width="2in"/>
-                                               <fo:table-column column-width="2in"/>
-                                               <fo:table-body start-indent="0pt" end-indent="0pt">
-                                                       <fo:table-row>
-                                                               <fo:table-cell>
-                                                                       <fo:block>cell1</fo:block>
-                                                               </fo:table-cell>
-                                                               <fo:table-cell background-color="yellow">
-                                                                       <fo:block>cell2</fo:block>
-                                                               </fo:table-cell>
-                                                       </fo:table-row>
-                                                       <fo:table-row>
-                                                               <fo:table-cell background-color="orange">
-                                                                       <fo:block text-align="end">cell3</fo:block>
-                                                               </fo:table-cell>
-                                                               <fo:table-cell>
-                                                                       <fo:block>cell4</fo:block>
-                                                               </fo:table-cell>
-                                                       </fo:table-row>
-                                               </fo:table-body>
-                                       </fo:table>
-                                       <fo:block background-color="orange">after table</fo:block>
-                                       <fo:block-container width="4in + 15pt">
-                                               <fo:block space-before="5pt" space-after="10pt" margin-left="5pt" margin-right="10pt" background-color="lightgray">
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:block background-color="orange">before table</fo:block>
+          <fo:table table-layout="fixed" space-before="5pt" space-after="10pt" margin-left="5pt" margin-right="10pt" width="4in + 15pt" background-color="lightgray">
+            <fo:table-column column-width="2in"/>
+            <fo:table-column column-width="2in"/>
+            <fo:table-body start-indent="0pt" end-indent="0pt">
+              <fo:table-row>
+                <fo:table-cell>
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell background-color="yellow">
+                  <fo:block>cell2</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+              <fo:table-row>
+                <fo:table-cell background-color="orange">
+                  <fo:block text-align="end">cell3</fo:block>
+                </fo:table-cell>
+                <fo:table-cell>
+                  <fo:block>cell4</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+          <fo:block background-color="orange">after table</fo:block>
+          <fo:block-container width="4in + 15pt">
+            <fo:block space-before="5pt" space-after="10pt" margin-left="5pt" margin-right="10pt" background-color="lightgray">
               reference block
             </fo:block>
-                                       </fo:block-container>
-                               </fo:flow>
-                       </fo:page-sequence>
-               </fo:root>
-       </fo>
-       <checks>
-               <!-- spaces -->
-               <eval expected="5000" xpath="//flow/block[2]/@bpd"/>
-               <eval expected="10000" xpath="//flow/block[4]/@bpd"/>
-               <!-- table dimensions -->
-               <eval expected="303000" xpath="//flow/block[3]/@ipda"/>
-               <eval expected="303000" xpath="//flow/block[3]/@ipd"/>
-               <eval expected="28800" xpath="//flow/block[3]/@bpda"/>
-               <eval expected="28800" xpath="//flow/block[3]/@bpd"/>
-               <!-- cell 1 -->
-               <true xpath="//flow/block[3]/block[1]/@is-reference-area"/>
-               <eval expected="5000" xpath="//flow/block[3]/block[1]/@left-offset"/>
-               <true xpath="not(boolean(//flow/block[3]/block[1]/@top-offset)) or (//flow/block[3]/block[1]/@top-offset = 0)"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[1]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[1]/@bpd"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[1]/block[1]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[1]/block[1]/@bpd"/>
-               <eval expected="cell1" xpath="//flow/block[3]/block[1]/block[1]/lineArea"/>
-               <!-- cell 2 -->
-               <true xpath="//flow/block[3]/block[2]/@is-reference-area"/>
-               <eval expected="149000" xpath="//flow/block[3]/block[2]/@left-offset"/>
-               <true xpath="not(boolean(//flow/block[3]/block[2]/@top-offset)) or (//flow/block[3]/block[2]/@top-offset = 0)"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[2]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[2]/@bpd"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[2]/block[1]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[2]/block[1]/@bpd"/>
-               <eval expected="cell2" xpath="//flow/block[3]/block[2]/block[1]/lineArea"/>
-               <eval expected="color=#ffff00" xpath="//flow/block[3]/block[2]/@background"/>
-               <!-- cell 3 -->
-               <true xpath="//flow/block[3]/block[3]/@is-reference-area"/>
-               <eval expected="5000" xpath="//flow/block[3]/block[3]/@left-offset"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[3]/@top-offset"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[3]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[3]/@bpd"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[3]/block[1]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[3]/block[1]/@bpd"/>
-               <eval expected="cell3" xpath="//flow/block[3]/block[3]/block[1]/lineArea"/>
-               <eval expected="color=#ffa500" xpath="//flow/block[3]/block[3]/@background"/>
-               <!-- cell 4 -->
-               <true xpath="//flow/block[3]/block[4]/@is-reference-area"/>
-               <eval expected="149000" xpath="//flow/block[3]/block[4]/@left-offset"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[4]/@top-offset"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[4]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[4]/@bpd"/>
-               <eval expected="144000" xpath="//flow/block[3]/block[4]/block[1]/@ipd"/>
-               <eval expected="14400" xpath="//flow/block[3]/block[4]/block[1]/@bpd"/>
-               <eval expected="cell4" xpath="//flow/block[3]/block[4]/block[1]/lineArea"/>
-       </checks>
+          </fo:block-container>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <!-- spaces -->
+    <eval expected="5000" xpath="//flow/block[2]/@space-before"/>
+    <eval expected="10000" xpath="//flow/block[2]/@space-after"/>
+    <!-- table dimensions -->
+    <eval expected="303000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="303000" xpath="//flow/block[2]/@ipd"/>
+    <eval expected="43800" xpath="//flow/block[2]/@bpda"/>
+    <eval expected="28800" xpath="//flow/block[2]/@bpd"/>
+    <!-- cell 1 -->
+    <true xpath="//flow/block[2]/block[1]/@is-reference-area"/>
+    <eval expected="5000" xpath="//flow/block[2]/block[1]/@left-offset"/>
+    <true xpath="not(boolean(//flow/block[2]/block[1]/@top-offset)) or (//flow/block[3]/block[1]/@top-offset = 0)"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/@bpd"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[1]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[1]/block[1]/@bpd"/>
+    <eval expected="cell1" xpath="//flow/block[2]/block[1]/block[1]/lineArea"/>
+    <!-- cell 2 -->
+    <true xpath="//flow/block[2]/block[2]/@is-reference-area"/>
+    <eval expected="149000" xpath="//flow/block[2]/block[2]/@left-offset"/>
+    <true xpath="not(boolean(//flow/block[2]/block[2]/@top-offset)) or (//flow/block[3]/block[2]/@top-offset = 0)"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[2]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/@bpd"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[2]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[2]/block[1]/@bpd"/>
+    <eval expected="cell2" xpath="//flow/block[2]/block[2]/block[1]/lineArea"/>
+    <eval expected="color=#ffff00" xpath="//flow/block[2]/block[2]/@background"/>
+    <!-- cell 3 -->
+    <true xpath="//flow/block[2]/block[3]/@is-reference-area"/>
+    <eval expected="5000" xpath="//flow/block[2]/block[3]/@left-offset"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/@top-offset"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[3]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/@bpd"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[3]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[3]/block[1]/@bpd"/>
+    <eval expected="cell3" xpath="//flow/block[2]/block[3]/block[1]/lineArea"/>
+    <eval expected="color=#ffa500" xpath="//flow/block[2]/block[3]/@background"/>
+    <!-- cell 4 -->
+    <true xpath="//flow/block[2]/block[4]/@is-reference-area"/>
+    <eval expected="149000" xpath="//flow/block[2]/block[4]/@left-offset"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[4]/@top-offset"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[4]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[4]/@bpd"/>
+    <eval expected="144000" xpath="//flow/block[2]/block[4]/block[1]/@ipd"/>
+    <eval expected="14400" xpath="//flow/block[2]/block[4]/block[1]/@bpd"/>
+    <eval expected="cell4" xpath="//flow/block[2]/block[4]/block[1]/lineArea"/>
+  </checks>
 </testcase>
diff --git a/test/layoutengine/testcases/table_space-before_space-after_1.xml b/test/layoutengine/testcases/table_space-before_space-after_1.xml
new file mode 100644 (file)
index 0000000..430d868
--- /dev/null
@@ -0,0 +1,203 @@
+<?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 space properties on table.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="1.8in">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" id="retain">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%" border-collapse="separate" space-before="20pt" space-before.conditionality="retain" space-after="10pt" space-after.conditionality="retain">
+            <fo:table-column column-width="proportional-column-width(1)"/>
+            <fo:table-column column-width="proportional-column-width(9)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell>
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell>
+            <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+            </fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+          <fo:block space-before.optimum="10pt" space-before.conditionality="retain" space-after="20pt" space-after.conditionality="retain">
+Two blocks, testing conditionality="retain".
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+      <fo:page-sequence master-reference="normal" id="discard">
+        <fo:flow flow-name="xsl-region-body">
+          <fo:table table-layout="fixed" width="100%" border-collapse="separate" space-before="20pt" space-before.conditionality="discard" space-after="10pt" space-after.conditionality="discard">
+            <fo:table-column column-width="proportional-column-width(1)"/>
+            <fo:table-column column-width="proportional-column-width(9)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell>
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell>
+            <fo:block text-align="justify">
+In olden times when wishing still helped one, there lived a king whose daughters 
+were all beautiful; and the youngest was so beautiful that the sun itself, which 
+has seen so much, was astonished whenever it shone in her face. Close by the king's 
+castle lay a great dark forest, and under an old lime-tree in the forest was a well, 
+and when the day was very warm, the king's child went out into the forest and sat 
+down by the side of the cool fountain; and when she was bored she took a golden ball, 
+and threw it up on high and caught it; and this ball was her favorite plaything.
+            </fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+          <fo:block space-before="10pt" space-before.conditionality="discard" space-after="20pt" space-after.conditionality="discard">
+Two blocks, testing conditionality="discard".
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker" id="retain">
+      <box w="0"/> <!-- Helper box bearing the SpaceHandlingPosition and making sure the glue gets processed -->
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="0"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="14400"/> <!-- p is not of interest here -->
+      <glue w="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="28800"/>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="14400"/>
+      
+      <!-- skip three more lines -->
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      <skip>8</skip>
+      
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-30000"/>
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="28800"/> <!-- end of table -->
+      
+      <penalty w="0" p="INF" aux="true"/>
+      <glue w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-10000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="10000"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="20000"/>
+      
+      <box w="0"/> <!-- This is used to make sure the preceding glue is not cut off -->
+      
+      <skip>3</skip>
+    </element-list>
+    <element-list category="breaker" id="discard">
+      <box w="0"/> <!-- Helper box used to notify the LM for the addAreas stage about the discarded spaces -->
+      <box w="0"/>
+      <penalty w="14400"/> <!-- p is not of interest here -->
+      <box w="28800"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="14400"/>
+      <penalty w="0" p="0"/>
+      <box w="28800"/>
+      <penalty w="0" p="0"/>
+      <glue w="10000"/>
+      
+      <box w="14400"/> <!-- second block -->
+      
+      <box w="0"/> <!-- SpaceHandlingPosition-bearing helper box -->
+      
+      <skip>3</skip>
+    </element-list>
+    
+    <eval expected="4" xpath="count(//pageViewport)"/>
+    
+    <!-- 1: retain -->
+    <eval expected="20000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="10000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <!-- the following space is eliminated/collapsed through space resolution -->
+    <true xpath="not(boolean(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after))"/>
+    <eval expected="10000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-before"/>
+    <eval expected="20000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-after"/>
+    
+    <!-- 2: discard -->
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before))"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-after))"/>
+    <eval expected="10000" xpath="//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-before"/>
+    <true xpath="not(boolean(//pageViewport[@nr=4]/page/regionViewport/regionBody/mainReference/span/flow/block[2]/@space-after))"/>
+  </checks>
+</testcase>
diff --git a/test/layoutengine/testcases/table_space-before_space-after_2.xml b/test/layoutengine/testcases/table_space-before_space-after_2.xml
new file mode 100644 (file)
index 0000000..310c113
--- /dev/null
@@ -0,0 +1,104 @@
+<?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 space properties on table. Demonstrates that spaces are repeated on every generated area.
+    </p>
+  </info>
+  <fo>
+    <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="normal" page-width="5in" page-height="30pt">
+          <fo:region-body/>
+        </fo:simple-page-master>
+      </fo:layout-master-set>
+      <fo:page-sequence master-reference="normal" white-space-collapse="true">
+        <fo:flow flow-name="xsl-region-body" line-height="10pt" font-size="9pt">
+          <fo:table table-layout="fixed" width="100%" border-collapse="separate" space-before="5pt" space-before.conditionality="retain" background-color="yellow">
+            <fo:table-column column-width="proportional-column-width(1)"/>
+            <fo:table-column column-width="proportional-column-width(9)"/>
+            <fo:table-body>
+              <fo:table-row>
+                <fo:table-cell>
+                  <fo:block>cell1</fo:block>
+                </fo:table-cell>
+                <fo:table-cell>
+                  <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>line 5</fo:block>
+                </fo:table-cell>
+              </fo:table-row>
+            </fo:table-body>
+          </fo:table>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <element-list category="breaker">
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      <penalty w="0" p="0"/>
+      <glue w="-5000"/>
+      
+      <box w="0"/>
+      <penalty w="0" p="INF"/>
+      <glue w="5000"/>
+      <box w="10000"/>
+      
+      <skip>3</skip>
+    </element-list>
+    <eval expected="3" xpath="count(//pageViewport)"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="5000" xpath="//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/@space-before"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block)"/>
+    <eval expected="2" xpath="count(//pageViewport[@nr=1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block)"/>
+    <eval expected="2" xpath="count(//pageViewport[@nr=2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block)"/>
+    <eval expected="1" xpath="count(//pageViewport[@nr=3]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block)"/>
+    
+  </checks>
+</testcase>
index 50c2ab834cefa2b4c8204c48f268eca965e522f5..7d1ebbaadd456310d12df6941f9ccda135b55249 100644 (file)
     <eval expected="220000" xpath="//flow/block[1]/block[2]/@ipda"/>
     <eval expected="220000" xpath="//flow/block[1]/block[2]/@ipd"/>
 
-    <eval expected="10000" xpath="//flow/block[2]/@bpda"/> <!-- space-before -->
+    <eval expected="10000" xpath="//flow/block[2]/@space-before"/>
 
     <!-- table 2 -->
-    <eval expected="310000" xpath="//flow/block[3]/@ipda"/>
-    <eval expected="300000" xpath="//flow/block[3]/@ipd"/>
-    <eval expected="100000" xpath="//flow/block[3]/block[1]/@ipda"/>
-    <eval expected="100000" xpath="//flow/block[3]/block[1]/@ipd"/>
-    <eval expected="66666" xpath="//flow/block[3]/block[2]/@ipda"/>
-    <eval expected="66666" xpath="//flow/block[3]/block[2]/@ipd"/>
-    <eval expected="133333" xpath="//flow/block[3]/block[3]/@ipda"/>
-    <eval expected="133333" xpath="//flow/block[3]/block[3]/@ipd"/>
+    <eval expected="310000" xpath="//flow/block[2]/@ipda"/>
+    <eval expected="300000" xpath="//flow/block[2]/@ipd"/>
+    <eval expected="100000" xpath="//flow/block[2]/block[1]/@ipda"/>
+    <eval expected="100000" xpath="//flow/block[2]/block[1]/@ipd"/>
+    <eval expected="66666" xpath="//flow/block[2]/block[2]/@ipda"/>
+    <eval expected="66666" xpath="//flow/block[2]/block[2]/@ipd"/>
+    <eval expected="133333" xpath="//flow/block[2]/block[3]/@ipda"/>
+    <eval expected="133333" xpath="//flow/block[2]/block[3]/@ipd"/>
   </checks>
 </testcase>