From f54710eda526c851973299ebdf30ef5a67c65b63 Mon Sep 17 00:00:00 2001 From: Vincent Hennebert Date: Thu, 8 May 2008 19:29:55 +0000 Subject: [PATCH] In collapsed borders, the 'nonLeadingTrailing' case actually corresponds to the usual, 'normal' case, when no break occurs in the table. Renamed fields and parameters accordingly for readability and simplicity git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@654600 13f79535-47bb-0310-9956-ffa450edef68 --- .../flow/table/CollapsingBorderResolver.java | 69 ++++++++-------- .../fop/fo/flow/table/ConditionalBorder.java | 79 +++++++++---------- .../apache/fop/fo/flow/table/GridUnit.java | 34 ++++---- .../CollapsedConditionalBorderTestCase.java | 16 ++-- 4 files changed, 97 insertions(+), 101 deletions(-) diff --git a/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java b/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java index 23f797a3e..86bf40f2f 100644 --- a/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java +++ b/src/java/org/apache/fop/fo/flow/table/CollapsingBorderResolver.java @@ -79,18 +79,18 @@ class CollapsingBorderResolver implements BorderResolver { * * @param row the first row of the table (in the header, or in the body if the * table has no header) + * @param withNormal * @param withLeadingTrailing - * @param withNonLeadingTrailing * @param withRest */ - void resolveBordersFirstRowInTable(List/**/ row, boolean withLeadingTrailing, - boolean withNonLeadingTrailing, boolean withRest) { + void resolveBordersFirstRowInTable(List/**/ row, boolean withNormal, + boolean withLeadingTrailing, boolean withRest) { assert firstInTable; for (int i = 0; i < row.size(); i++) { TableColumn column = table.getColumn(i); ((GridUnit) row.get(i)).integrateBorderSegment( - CommonBorderPaddingBackground.BEFORE, column, withLeadingTrailing, - withNonLeadingTrailing, withRest); + CommonBorderPaddingBackground.BEFORE, column, withNormal, + withLeadingTrailing, withRest); } firstInTable = false; } @@ -113,11 +113,11 @@ class CollapsingBorderResolver implements BorderResolver { } /** Integrates the border-after of the part. */ - void resolveBordersLastRowInPart(List/**/ row, boolean withLeadingTrailing, - boolean withNonLeadingTrailing, boolean withRest) { + void resolveBordersLastRowInPart(List/**/ row, boolean withNormal, + boolean withLeadingTrailing, boolean withRest) { for (int i = 0; i < row.size(); i++) { ((GridUnit) row.get(i)).integrateBorderSegment(CommonBorderPaddingBackground.AFTER, - tablePart, withLeadingTrailing, withNonLeadingTrailing, withRest); + tablePart, withNormal, withLeadingTrailing, withRest); } } @@ -126,16 +126,16 @@ class CollapsingBorderResolver implements BorderResolver { * * @param row the last row of the footer, or of the last body if the table has no * footer + * @param withNormal * @param withLeadingTrailing - * @param withNonLeadingTrailing * @param withRest */ - void resolveBordersLastRowInTable(List/**/ row, boolean withLeadingTrailing, - boolean withNonLeadingTrailing, boolean withRest) { + void resolveBordersLastRowInTable(List/**/ row, boolean withNormal, + boolean withLeadingTrailing, boolean withRest) { for (int i = 0; i < row.size(); i++) { TableColumn column = table.getColumn(i); ((GridUnit) row.get(i)).integrateBorderSegment(CommonBorderPaddingBackground.AFTER, - column, withLeadingTrailing, withNonLeadingTrailing, withRest); + column, withNormal, withLeadingTrailing, withRest); } } @@ -151,7 +151,7 @@ class CollapsingBorderResolver implements BorderResolver { GridUnit gu = (GridUnit) row.get(i); ConditionalBorder border = (ConditionalBorder) leadingBorders.get(i); gu.integrateCompetingBorder(CommonBorderPaddingBackground.BEFORE, border, - true, false, true); + false, true, true); } } @@ -167,7 +167,7 @@ class CollapsingBorderResolver implements BorderResolver { GridUnit gu = (GridUnit) row.get(i); ConditionalBorder border = (ConditionalBorder) trailingBorders.get(i); gu.integrateCompetingBorder(CommonBorderPaddingBackground.AFTER, border, - true, false, true); + false, true, true); } } @@ -250,16 +250,15 @@ class CollapsingBorderResolver implements BorderResolver { * The two only sensible values for border-before on the header's first row are: * - at the beginning of the table (normal case) * - if the header is repeated after each page break - * To represent those values we (ab)use the nonLeadingTrailing and the rest - * fields of ConditionalBorder. But strictly speaking this is not their - * purposes. + * To represent those values we (ab)use the normal and the rest fields of + * ConditionalBorder. But strictly speaking this is not their purposes. */ for (Iterator guIter = row.iterator(); guIter.hasNext();) { ConditionalBorder borderBefore = ((GridUnit) guIter.next()).borderBefore; - borderBefore.leadingTrailing = borderBefore.nonLeadingTrailing; - borderBefore.rest = borderBefore.nonLeadingTrailing; + borderBefore.leadingTrailing = borderBefore.normal; + borderBefore.rest = borderBefore.normal; } - resolveBordersFirstRowInTable(row, false, true, true); + resolveBordersFirstRowInTable(row, true, false, true); } previousRow = row; } @@ -272,14 +271,14 @@ class CollapsingBorderResolver implements BorderResolver { * The border-after of a header is always the same. Leading and rest don't * apply to cells in the header since they are never broken. To ease * resolution we override the (normally unused) leadingTrailing and rest - * fields of ConditionalBorder with the only sensible nonLeadingTrailing - * field. That way grid units from the body will always resolve against the - * same, normal header border. + * fields of ConditionalBorder with the only sensible normal field. That way + * grid units from the body will always resolve against the same, normal + * header border. */ for (Iterator guIter = previousRow.iterator(); guIter.hasNext();) { ConditionalBorder borderAfter = ((GridUnit) guIter.next()).borderAfter; - borderAfter.leadingTrailing = borderAfter.nonLeadingTrailing; - borderAfter.rest = borderAfter.nonLeadingTrailing; + borderAfter.leadingTrailing = borderAfter.normal; + borderAfter.rest = borderAfter.normal; leadingBorders.add(borderAfter); } /* TODO Temporary hack for resolved borders in header */ @@ -311,8 +310,8 @@ class CollapsingBorderResolver implements BorderResolver { // See same method in ResolverInHeader for an explanation of the hack for (Iterator guIter = footerFirstRow.iterator(); guIter.hasNext();) { ConditionalBorder borderBefore = ((GridUnit) guIter.next()).borderBefore; - borderBefore.leadingTrailing = borderBefore.nonLeadingTrailing; - borderBefore.rest = borderBefore.nonLeadingTrailing; + borderBefore.leadingTrailing = borderBefore.normal; + borderBefore.rest = borderBefore.normal; trailingBorders.add(borderBefore); } } @@ -324,10 +323,10 @@ class CollapsingBorderResolver implements BorderResolver { // See endRow method in ResolverInHeader for an explanation of the hack for (Iterator guIter = footerLastRow.iterator(); guIter.hasNext();) { ConditionalBorder borderAfter = ((GridUnit) guIter.next()).borderAfter; - borderAfter.leadingTrailing = borderAfter.nonLeadingTrailing; - borderAfter.rest = borderAfter.nonLeadingTrailing; + borderAfter.leadingTrailing = borderAfter.normal; + borderAfter.rest = borderAfter.normal; } - resolveBordersLastRowInTable(footerLastRow, false, true, true); + resolveBordersLastRowInTable(footerLastRow, true, false, true); } } @@ -351,7 +350,7 @@ class CollapsingBorderResolver implements BorderResolver { firstInBody = false; for (Iterator iter = row.iterator(); iter.hasNext();) { GridUnit gu = (GridUnit) iter.next(); - gu.borderBefore.leadingTrailing = gu.borderBefore.nonLeadingTrailing; + gu.borderBefore.leadingTrailing = gu.borderBefore.normal; } } } @@ -361,11 +360,11 @@ class CollapsingBorderResolver implements BorderResolver { resolverInFooter.endTable(); } else { // Trailing and rest borders already resolved with integrateTrailingBorders - resolveBordersLastRowInTable(previousRow, false, true, false); + resolveBordersLastRowInTable(previousRow, true, false, false); } for (Iterator iter = previousRow.iterator(); iter.hasNext();) { GridUnit gu = (GridUnit) iter.next(); - gu.borderAfter.leadingTrailing = gu.borderAfter.nonLeadingTrailing; + gu.borderAfter.leadingTrailing = gu.borderAfter.normal; } } } @@ -428,13 +427,13 @@ class CollapsingBorderResolver implements BorderResolver { if (headerLastRow != null) { for (Iterator iter = headerLastRow.iterator(); iter.hasNext();) { GridUnit gu = (GridUnit) iter.next(); - gu.borderAfter.leadingTrailing = gu.borderAfter.nonLeadingTrailing; + gu.borderAfter.leadingTrailing = gu.borderAfter.normal; } } if (footerLastRow != null) { for (Iterator iter = footerLastRow.iterator(); iter.hasNext();) { GridUnit gu = (GridUnit) iter.next(); - gu.borderAfter.leadingTrailing = gu.borderAfter.nonLeadingTrailing; + gu.borderAfter.leadingTrailing = gu.borderAfter.normal; } } /* End of temporary hack */ diff --git a/src/java/org/apache/fop/fo/flow/table/ConditionalBorder.java b/src/java/org/apache/fop/fo/flow/table/ConditionalBorder.java index 4313b82a6..389681f1d 100644 --- a/src/java/org/apache/fop/fo/flow/table/ConditionalBorder.java +++ b/src/java/org/apache/fop/fo/flow/table/ConditionalBorder.java @@ -26,7 +26,7 @@ import org.apache.fop.layoutmgr.table.CollapsingBorderModel; * in the collapsing model. These three values are (for border-before, similar for * border-after): *
    - *
  • non-leading: common case, when a cell follows the cell before on a same page;
  • + *
  • normal: common case, when a cell follows the cell before on a same page;
  • *
  • leading: when the table is broken and the cell appears at the top of a page, in * which case its border must be resolved with the header (or the top of the table) * instead of with the previous cell;
  • @@ -42,23 +42,23 @@ public class ConditionalBorder { public static final int REST = 2; + /** Normal case, no break. */ + BorderSpecification normal; + /** Special case: the cell is at the top or the bottom of the page. */ BorderSpecification leadingTrailing; - /** Normal case, no break. */ - BorderSpecification nonLeadingTrailing; - /** Special case: break inside the cell. */ BorderSpecification rest; /** The model used to resolve borders. */ private CollapsingBorderModel collapsingBorderModel; - private ConditionalBorder(BorderSpecification leadingTrailing, - BorderSpecification nonLeadingTrailing, BorderSpecification rest, + private ConditionalBorder(BorderSpecification normal, + BorderSpecification leadingTrailing, BorderSpecification rest, CollapsingBorderModel collapsingBorderModel) { + this.normal = normal; this.leadingTrailing = leadingTrailing; - this.nonLeadingTrailing = nonLeadingTrailing; this.rest = rest; this.collapsingBorderModel = collapsingBorderModel; } @@ -71,8 +71,8 @@ public class ConditionalBorder { */ ConditionalBorder(BorderSpecification borderSpecification, CollapsingBorderModel collapsingBorderModel) { - leadingTrailing = borderSpecification; - nonLeadingTrailing = leadingTrailing; + normal = borderSpecification; + leadingTrailing = normal; if (borderSpecification.getBorderInfo().getWidth().isDiscard()) { rest = BorderSpecification.getDefaultBorder(); } else { @@ -85,26 +85,26 @@ public class ConditionalBorder { * Resolves and updates the relevant parts of this border as well as the given one. * * @param competitor + * @param withNormal * @param withLeadingTrailing - * @param withNonLeadingTrailing * @param withRest */ - void resolve(ConditionalBorder competitor, boolean withLeadingTrailing, - boolean withNonLeadingTrailing, boolean withRest) { - if (withLeadingTrailing) { + void resolve(ConditionalBorder competitor, boolean withNormal, + boolean withLeadingTrailing, boolean withRest) { + if (withNormal) { BorderSpecification resolvedBorder = collapsingBorderModel.determineWinner( - leadingTrailing, competitor.leadingTrailing); + normal, competitor.normal); if (resolvedBorder != null) { - leadingTrailing = resolvedBorder; - competitor.leadingTrailing = resolvedBorder; + normal = resolvedBorder; + competitor.normal = resolvedBorder; } } - if (withNonLeadingTrailing) { + if (withLeadingTrailing) { BorderSpecification resolvedBorder = collapsingBorderModel.determineWinner( - nonLeadingTrailing, competitor.nonLeadingTrailing); + leadingTrailing, competitor.leadingTrailing); if (resolvedBorder != null) { - nonLeadingTrailing = resolvedBorder; - competitor.nonLeadingTrailing = resolvedBorder; + leadingTrailing = resolvedBorder; + competitor.leadingTrailing = resolvedBorder; } } if (withRest) { @@ -124,24 +124,24 @@ public class ConditionalBorder { * keeping the components to their old values. * * @param competitor + * @param withNormal * @param withLeadingTrailing - * @param withNonLeadingTrailing * @param withRest */ - void integrateCompetingSegment(ConditionalBorder competitor, boolean withLeadingTrailing, - boolean withNonLeadingTrailing, boolean withRest) { - if (withLeadingTrailing) { + void integrateCompetingSegment(ConditionalBorder competitor, boolean withNormal, + boolean withLeadingTrailing, boolean withRest) { + if (withNormal) { BorderSpecification resolvedBorder = collapsingBorderModel.determineWinner( - leadingTrailing, competitor.leadingTrailing); + normal, competitor.normal); if (resolvedBorder != null) { - leadingTrailing = resolvedBorder; + normal = resolvedBorder; } } - if (withNonLeadingTrailing) { + if (withLeadingTrailing) { BorderSpecification resolvedBorder = collapsingBorderModel.determineWinner( - nonLeadingTrailing, competitor.nonLeadingTrailing); + leadingTrailing, competitor.leadingTrailing); if (resolvedBorder != null) { - nonLeadingTrailing = resolvedBorder; + leadingTrailing = resolvedBorder; } } if (withRest) { @@ -158,22 +158,21 @@ public class ConditionalBorder { * CollapsingBorderModel is not expected to return null. * * @param segment + * @param withNormal * @param withLeadingTrailing - * @param withNonLeadingTrailing * @param withRest */ - void integrateSegment(ConditionalBorder segment, boolean withLeadingTrailing, - boolean withNonLeadingTrailing, boolean withRest) { + void integrateSegment(ConditionalBorder segment, boolean withNormal, + boolean withLeadingTrailing, boolean withRest) { + if (withNormal) { + normal = collapsingBorderModel.determineWinner(normal, segment.normal); + assert normal != null; + } if (withLeadingTrailing) { leadingTrailing = collapsingBorderModel.determineWinner(leadingTrailing, segment.leadingTrailing); assert leadingTrailing != null; } - if (withNonLeadingTrailing) { - nonLeadingTrailing = collapsingBorderModel.determineWinner(nonLeadingTrailing, - segment.nonLeadingTrailing); - assert nonLeadingTrailing != null; - } if (withRest) { rest = collapsingBorderModel.determineWinner(rest, segment.rest); assert rest != null; @@ -186,14 +185,12 @@ public class ConditionalBorder { * @return a copy of this border */ ConditionalBorder copy() { - return new ConditionalBorder(leadingTrailing, nonLeadingTrailing, rest, - collapsingBorderModel); + return new ConditionalBorder(normal, leadingTrailing, rest, collapsingBorderModel); } /** {@inheritDoc} */ public String toString() { - return "{non-leading: " + nonLeadingTrailing + ", leading: " + leadingTrailing + ", rest: " - + rest + "}"; + return "{normal: " + normal + ", leading: " + leadingTrailing + ", rest: " + rest + "}"; } /** diff --git a/src/java/org/apache/fop/fo/flow/table/GridUnit.java b/src/java/org/apache/fop/fo/flow/table/GridUnit.java index 578fcb883..ec84dd200 100644 --- a/src/java/org/apache/fop/fo/flow/table/GridUnit.java +++ b/src/java/org/apache/fop/fo/flow/table/GridUnit.java @@ -133,11 +133,11 @@ public class GridUnit { protected void setBordersFromCell() { borderBefore = cell.borderBefore.copy(); if (rowSpanIndex > 0) { - borderBefore.nonLeadingTrailing = BorderSpecification.getDefaultBorder(); + borderBefore.normal = BorderSpecification.getDefaultBorder(); } borderAfter = cell.borderAfter.copy(); if (!isLastGridUnitRowSpan()) { - borderAfter.nonLeadingTrailing = BorderSpecification.getDefaultBorder(); + borderAfter.normal = BorderSpecification.getDefaultBorder(); } if (colSpanIndex == 0) { borderStart = cell.borderStart; @@ -235,7 +235,7 @@ public class GridUnit { public BorderInfo getBorderBefore(int which) { switch (which) { case ConditionalBorder.NORMAL: - return borderBefore.nonLeadingTrailing.getBorderInfo(); + return borderBefore.normal.getBorderInfo(); case ConditionalBorder.LEADING_TRAILING: return borderBefore.leadingTrailing.getBorderInfo(); case ConditionalBorder.REST: @@ -257,7 +257,7 @@ public class GridUnit { public BorderInfo getBorderAfter(int which) { switch (which) { case ConditionalBorder.NORMAL: - return borderAfter.nonLeadingTrailing.getBorderInfo(); + return borderAfter.normal.getBorderInfo(); case ConditionalBorder.LEADING_TRAILING: return borderAfter.leadingTrailing.getBorderInfo(); case ConditionalBorder.REST: @@ -299,10 +299,10 @@ public class GridUnit { void resolveBorder(GridUnit other, int side) { switch (side) { case CommonBorderPaddingBackground.BEFORE: - borderBefore.resolve(other.borderAfter, false, true, false); + borderBefore.resolve(other.borderAfter, true, false, false); break; case CommonBorderPaddingBackground.AFTER: - borderAfter.resolve(other.borderBefore, false, true, false); + borderAfter.resolve(other.borderBefore, true, false, false); break; case CommonBorderPaddingBackground.START: BorderSpecification resolvedBorder = collapsingBorderModel.determineWinner( @@ -333,16 +333,16 @@ public class GridUnit { * @param parent a table element whose corresponding border coincides on the given * side */ - void integrateBorderSegment(int side, TableFObj parent, boolean withLeadingTrailing, - boolean withNonLeadingTrailing, boolean withRest) { + void integrateBorderSegment(int side, TableFObj parent, boolean withNormal, + boolean withLeadingTrailing, boolean withRest) { switch (side) { case CommonBorderPaddingBackground.BEFORE: - borderBefore.integrateSegment(parent.borderBefore, withLeadingTrailing, - withNonLeadingTrailing, withRest); + borderBefore.integrateSegment(parent.borderBefore, withNormal, + withLeadingTrailing, withRest); break; case CommonBorderPaddingBackground.AFTER: - borderAfter.integrateSegment(parent.borderAfter, withLeadingTrailing, - withNonLeadingTrailing, withRest); + borderAfter.integrateSegment(parent.borderAfter, withNormal, + withLeadingTrailing, withRest); break; default: assert false; } @@ -375,15 +375,15 @@ public class GridUnit { } void integrateCompetingBorder(int side, ConditionalBorder competitor, - boolean withLeadingTrailing, boolean withNonLeadingTrailing, boolean withRest) { + boolean withNormal, boolean withLeadingTrailing, boolean withRest) { switch (side) { case CommonBorderPaddingBackground.BEFORE: - borderBefore.integrateCompetingSegment(competitor, withLeadingTrailing, - withNonLeadingTrailing, withRest); + borderBefore.integrateCompetingSegment(competitor, withNormal, + withLeadingTrailing, withRest); break; case CommonBorderPaddingBackground.AFTER: - borderAfter.integrateCompetingSegment(competitor, withLeadingTrailing, - withNonLeadingTrailing, withRest); + borderAfter.integrateCompetingSegment(competitor, withNormal, + withLeadingTrailing, withRest); break; default: assert false; } diff --git a/test/java/org/apache/fop/fo/flow/table/CollapsedConditionalBorderTestCase.java b/test/java/org/apache/fop/fo/flow/table/CollapsedConditionalBorderTestCase.java index e42ee2935..3abc2f73b 100644 --- a/test/java/org/apache/fop/fo/flow/table/CollapsedConditionalBorderTestCase.java +++ b/test/java/org/apache/fop/fo/flow/table/CollapsedConditionalBorderTestCase.java @@ -141,12 +141,12 @@ public class CollapsedConditionalBorderTestCase extends AbstractTableTestCase { GridUnit gu = getGridUnit(body); String errorMsge = baseErrorMsge + "border-before"; - checkBorder(errorMsge, gu.borderBefore.nonLeadingTrailing, 8000, Color.black); + checkBorder(errorMsge, gu.borderBefore.normal, 8000, Color.black); checkBorder(errorMsge, gu.borderBefore.leadingTrailing, 8000, Color.black); checkBorder(errorMsge, gu.borderBefore.rest, resolvedBorders[tableNum][0]); errorMsge = baseErrorMsge + "border-after"; - checkBorder(errorMsge, gu.borderAfter.nonLeadingTrailing, 8000, Color.black); + checkBorder(errorMsge, gu.borderAfter.normal, 8000, Color.black); checkBorder(errorMsge, gu.borderAfter.leadingTrailing, 8000, Color.black); checkBorder(errorMsge, gu.borderAfter.rest, resolvedBorders[tableNum][1]); @@ -165,14 +165,14 @@ public class CollapsedConditionalBorderTestCase extends AbstractTableTestCase { TableBody header = table.getTableHeader(); GridUnit gu = getGridUnit(header); - checkBorder(errorMsge, gu.borderBefore.nonLeadingTrailing, + checkBorder(errorMsge, gu.borderBefore.normal, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderBefore.rest, resolvedBordersHF[tableNum][borderNum++]); TableBody footer = table.getTableFooter(); gu = getGridUnit(footer); - checkBorder(errorMsge, gu.borderAfter.nonLeadingTrailing, + checkBorder(errorMsge, gu.borderAfter.normal, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderAfter.rest, resolvedBordersHF[tableNum][borderNum++]); @@ -180,13 +180,13 @@ public class CollapsedConditionalBorderTestCase extends AbstractTableTestCase { FONodeIterator bodyIter = table.getChildNodes(); TableBody body = (TableBody) bodyIter.nextNode(); gu = getGridUnit(body); - checkBorder(errorMsge, gu.borderBefore.nonLeadingTrailing, + checkBorder(errorMsge, gu.borderBefore.normal, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderBefore.leadingTrailing, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderBefore.rest, resolvedBordersHF[tableNum][borderNum++]); - checkBorder(errorMsge, gu.borderAfter.nonLeadingTrailing, + checkBorder(errorMsge, gu.borderAfter.normal, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderAfter.leadingTrailing, resolvedBordersHF[tableNum][borderNum++]); @@ -195,13 +195,13 @@ public class CollapsedConditionalBorderTestCase extends AbstractTableTestCase { body = (TableBody) bodyIter.nextNode(); gu = getGridUnit(body); - checkBorder(errorMsge, gu.borderBefore.nonLeadingTrailing, + checkBorder(errorMsge, gu.borderBefore.normal, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderBefore.leadingTrailing, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderBefore.rest, resolvedBordersHF[tableNum][borderNum++]); - checkBorder(errorMsge, gu.borderAfter.nonLeadingTrailing, + checkBorder(errorMsge, gu.borderAfter.normal, resolvedBordersHF[tableNum][borderNum++]); checkBorder(errorMsge, gu.borderAfter.leadingTrailing, resolvedBordersHF[tableNum][borderNum++]); -- 2.39.5