From: Jeremias Maerki Date: Mon, 23 May 2005 13:52:26 +0000 (+0000) Subject: Initial keep-together support on table. X-Git-Tag: fop-0_90-alpha1~635 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=01030d83370120af527800ff0bb929f6585007a0;p=xmlgraphics-fop.git Initial keep-together support on table. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198672 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/fop/fo/flow/Table.java b/src/java/org/apache/fop/fo/flow/Table.java index a6534e3d1..f1fee2a3c 100644 --- a/src/java/org/apache/fop/fo/flow/Table.java +++ b/src/java/org/apache/fop/fo/flow/Table.java @@ -200,7 +200,8 @@ public class Table extends FObj { */ protected void endOfNode() throws FOPException { if (!tableBodyFound) { - missingChildElementError("(marker*,table-column*,table-header?,table-footer?,table-body+)"); + missingChildElementError( + "(marker*,table-column*,table-header?,table-footer?,table-body+)"); } getFOEventHandler().endTable(this); @@ -235,6 +236,7 @@ public class Table extends FObj { return this.defaultColumn; } + /** @return the list of table-column elements. */ public List getColumns() { return columns; } @@ -247,10 +249,12 @@ public class Table extends FObj { return (TableBody)childNodes.get(index); } + /** @return the body for the table-header. */ public TableBody getTableHeader() { return tableHeader; } + /** @return the body for the table-footer. */ public TableBody getTableFooter() { return tableFooter; } @@ -318,6 +322,15 @@ public class Table extends FObj { return keepTogether; } + /** + * Convenience method to check if a keep-together constraint is specified. + * @return true if keep-together is active. + */ + public boolean mustKeepTogether() { + return !getKeepTogether().getWithinPage().isAuto() + || !getKeepTogether().getWithinColumn().isAuto(); + } + /** @return the "border-collapse" property. */ public int getBorderCollapse() { return borderCollapse; diff --git a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java index 8bced6f32..20d3e70e2 100644 --- a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java @@ -198,7 +198,7 @@ public class TableContentLayoutManager { if (returnList.size() > 0) { //Remove last penalty KnuthElement last = (KnuthElement)returnList.getLast(); - if (last.isPenalty() && last.getP() == 0) { + if (last.isPenalty()) { returnList.removeLast(); } } diff --git a/src/java/org/apache/fop/layoutmgr/table/TableStepper.java b/src/java/org/apache/fop/layoutmgr/table/TableStepper.java index 76f2dc96f..21b0d44ba 100644 --- a/src/java/org/apache/fop/layoutmgr/table/TableStepper.java +++ b/src/java/org/apache/fop/layoutmgr/table/TableStepper.java @@ -141,6 +141,7 @@ public class TableStepper { } if (pgu.isLastGridUnitRowSpan() && pgu.getRow() != null) { makeBoxForWholeRow |= pgu.getRow().mustKeepTogether(); + makeBoxForWholeRow |= pgu.getTable().mustKeepTogether(); } if (makeBoxForWholeRow) { List list = new java.util.ArrayList(1); @@ -243,7 +244,11 @@ public class TableStepper { penaltyPos.footerElements = tclm.getFooterElements(); } } - returnList.add(new KnuthPenalty(effPenaltyLen, 0, false, penaltyPos, false)); + int p = 0; + if (getTableLM().mustKeepTogether()) { + p = KnuthPenalty.INFINITE; + } + returnList.add(new KnuthPenalty(effPenaltyLen, p, false, penaltyPos, false)); log.debug("step=" + step + " (+" + increase + ")" + " box=" + boxLen