DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG� RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=33808>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND� INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=33808 ------- Additional Comments From [EMAIL PROTECTED] 2005-04-05 06:28 ------- (From update of attachment 14566) diff -Nur fop-0.20.5-dist/src/org/apache/fop/fo/flow/AbstractTableBody.java fop-0.20.5/src/org/apache/fop/fo/flow/AbstractTableBody.java --- fop-0.20.5-dist/src/org/apache/fop/fo/flow/AbstractTableBody.java 2005-02-07 19:44:05.000000000 +0600 +++ fop-0.20.5/src/org/apache/fop/fo/flow/AbstractTableBody.java 2005-04-05 11:21:12.246807323 +0700 @@ -106,17 +106,17 @@ if (this.marker == START) { // Common Accessibility Properties - AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); +// AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); // Common Aural Properties - AuralProps mAurProps = propMgr.getAuralProps(); +// AuralProps mAurProps = propMgr.getAuralProps(); // Common Border, Padding, and Background Properties - BorderAndPadding bap = propMgr.getBorderAndPadding(); - BackgroundProps bProps = propMgr.getBackgroundProps(); +// BorderAndPadding bap = propMgr.getBorderAndPadding(); +// BackgroundProps bProps = propMgr.getBackgroundProps(); // Common Relative Position Properties - RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); +// RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); // this.properties.get("id"); diff -Nur fop-0.20.5-dist/src/org/apache/fop/fo/flow/Block.java fop-0.20.5/src/org/apache/fop/fo/flow/Block.java --- fop-0.20.5-dist/src/org/apache/fop/fo/flow/Block.java 2005-02-07 19:44:05.000000000 +0600 +++ fop-0.20.5/src/org/apache/fop/fo/flow/Block.java 2005-04-01 11:50:48.000000000 +0700 @@ -153,26 +153,26 @@ noLayoutCount=0; // Reset the "loop counter". // Common Accessibility Properties - AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); +// AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); // Common Aural Properties - AuralProps mAurProps = propMgr.getAuralProps(); +// AuralProps mAurProps = propMgr.getAuralProps(); // Common Border, Padding, and Background Properties - BorderAndPadding bap = propMgr.getBorderAndPadding(); - BackgroundProps bProps = propMgr.getBackgroundProps(); +// BorderAndPadding bap = propMgr.getBorderAndPadding(); +// BackgroundProps bProps = propMgr.getBackgroundProps(); // Common Font Properties //this.fontState = propMgr.getFontState(area.getFontInfo()); // Common Hyphenation Properties - HyphenationProps mHyphProps = propMgr.getHyphenationProps(); +// HyphenationProps mHyphProps = propMgr.getHyphenationProps(); // Common Margin Properties-Block - MarginProps mProps = propMgr.getMarginProps(); +// MarginProps mProps = propMgr.getMarginProps(); // Common Relative Position Properties - RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); +// RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); this.align = this.properties.get("text-align").getEnum(); this.alignLast = this.properties.get("text-align-last").getEnum(); diff -Nur fop-0.20.5-dist/src/org/apache/fop/fo/flow/RowSpanMgr.java fop-0.20.5/src/org/apache/fop/fo/flow/RowSpanMgr.java --- fop-0.20.5-dist/src/org/apache/fop/fo/flow/RowSpanMgr.java 2005-02-07 19:44:05.000000000 +0600 +++ fop-0.20.5/src/org/apache/fop/fo/flow/RowSpanMgr.java 2005-04-01 12:48:16.000000000 +0700 @@ -77,9 +77,9 @@ return (rowsRemaining == 1); } - boolean finishRow(int rowHeight) { + boolean finishRow(int rowHeight, boolean isFullRow) { totalRowHeight += rowHeight; - if (--rowsRemaining == 0) { + if (isFullRow && --rowsRemaining == 0) { if (cell != null) { cell.setRowHeight(totalRowHeight); } @@ -131,6 +131,16 @@ return false; } + public void setForceFinishSpans(int rowHeight) { + for (int i = 0; i < spanInfo.length; i++) { + if (spanInfo[i] != null && spanInfo[i].cell != null){ + spanInfo[i].cell.setRowHeight(spanInfo[i].totalRowHeight - rowHeight); + spanInfo[i].cell.setNumRowsSpanned(spanInfo[i].rowsRemaining); + } + spanInfo[i] = null; + } + } + /** * Done with a row. * Any spans with only one row left are done @@ -140,10 +150,11 @@ * then remove the cell from the list of spanned cells. For other * spans, add the rowHeight to the spanHeight. */ - public void finishRow(int rowHeight) { + public void finishRow(int rowHeight, boolean isFullRow) { for (int i = 0; i < spanInfo.length; i++) { - if (spanInfo[i] != null && spanInfo[i].finishRow(rowHeight)) + if (spanInfo[i] != null && spanInfo[i].finishRow(rowHeight,isFullRow)) { spanInfo[i] = null; + } } } diff -Nur fop-0.20.5-dist/src/org/apache/fop/fo/flow/TableCell.java fop-0.20.5/src/org/apache/fop/fo/flow/TableCell.java --- fop-0.20.5-dist/src/org/apache/fop/fo/flow/TableCell.java 2005-02-07 19:44:05.000000000 +0600 +++ fop-0.20.5/src/org/apache/fop/fo/flow/TableCell.java 2005-04-01 11:52:09.000000000 +0700 @@ -179,17 +179,17 @@ public void doSetup() // throws FOPException { // Common Accessibility Properties - AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); +// AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); // Common Aural Properties - AuralProps mAurProps = propMgr.getAuralProps(); +// AuralProps mAurProps = propMgr.getAuralProps(); // Common Border, Padding, and Background Properties - BorderAndPadding bap = propMgr.getBorderAndPadding(); - BackgroundProps bProps = propMgr.getBackgroundProps(); +// BorderAndPadding bap = propMgr.getBorderAndPadding(); +// BackgroundProps bProps = propMgr.getBackgroundProps(); // Common Relative Position Properties - RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); +// RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); // this.properties.get("border-after-precedence"); // this.properties.get("border-before-precendence"); @@ -246,7 +246,7 @@ public int layout(Area area) throws FOPException { - int originalAbsoluteHeight = area.getAbsoluteHeight(); +// int originalAbsoluteHeight = area.getAbsoluteHeight(); if (this.marker == BREAK_AFTER) { return Status.OK; } @@ -530,6 +530,13 @@ this.borderHeight = (borderBefore + borderAfter) / 2; } } - + public void setNumRowsSpanned(int numRowsSpanned){ + this.numRowsSpanned = Math.max(1, numRowsSpanned); + } + + public void resetMarker() { + bDone = false; + super.resetMarker(); + } } diff -Nur fop-0.20.5-dist/src/org/apache/fop/fo/flow/Table.java fop-0.20.5/src/org/apache/fop/fo/flow/Table.java --- fop-0.20.5-dist/src/org/apache/fop/fo/flow/Table.java 2005-02-07 19:44:05.000000000 +0600 +++ fop-0.20.5/src/org/apache/fop/fo/flow/Table.java 2005-04-01 11:54:19.000000000 +0700 @@ -117,20 +117,20 @@ if (this.marker == START) { // Common Accessibility Properties - AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); +// AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); // Common Aural Properties - AuralProps mAurProps = propMgr.getAuralProps(); +// AuralProps mAurProps = propMgr.getAuralProps(); // Common Border, Padding, and Background Properties - BorderAndPadding bap = propMgr.getBorderAndPadding(); - BackgroundProps bProps = propMgr.getBackgroundProps(); +// BorderAndPadding bap = propMgr.getBorderAndPadding(); +// BackgroundProps bProps = propMgr.getBackgroundProps(); // Common Margin Properties-Block - MarginProps mProps = propMgr.getMarginProps(); +// MarginProps mProps = propMgr.getMarginProps(); // Common Relative Position Properties - RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); +// RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); // this.properties.get("block-progression-dimension"); // this.properties.get("border-after-precendence"); @@ -447,7 +447,7 @@ private int calcFixedColumnWidths(int maxAllocationWidth) { int nextColumnNumber=1; - int iEmptyCols=0; +// int iEmptyCols=0; double dTblUnits=0.0; int iFixedWidth=0; double dWidthFactor = 0.0; @@ -459,7 +459,7 @@ log.warn("No table-column specification for column " + nextColumnNumber); // What about sizing issues? - iEmptyCols++; +// iEmptyCols++; } else { Length colLength = c.getColumnWidthAsLength(); @@ -508,9 +508,9 @@ /* No proportional units. If minimum IPD is specified, check * that sum of column widths > minIPD. */ - int iTableWidth = iFixedWidth; +// int iTableWidth = iFixedWidth; if (this.minIPD > iFixedWidth) { - iTableWidth = this.minIPD; +// iTableWidth = this.minIPD; // Add extra space to each column dWidthFactor = (double)this.minIPD/(double)iFixedWidth; } diff -Nur fop-0.20.5-dist/src/org/apache/fop/fo/flow/TableRow.java fop-0.20.5/src/org/apache/fop/fo/flow/TableRow.java --- fop-0.20.5-dist/src/org/apache/fop/fo/flow/TableRow.java 2005-02-07 19:44:05.000000000 +0600 +++ fop-0.20.5/src/org/apache/fop/fo/flow/TableRow.java 2005-04-05 11:18:44.817271870 +0700 @@ -173,6 +173,13 @@ } return rslt; } + + public void setForceCellsStart() { + for (int i=0; i<states.length; i++){ + if (cells[i] != null) + states[i] = CELLSTART; + } + } } @@ -202,21 +209,21 @@ public void doSetup(Area area) throws FOPException { // Common Accessibility Properties - AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); +// AccessibilityProps mAccProps = propMgr.getAccessibilityProps(); // this.properties.get("block-progression-dimension"); // Common Aural Properties - AuralProps mAurProps = propMgr.getAuralProps(); +// AuralProps mAurProps = propMgr.getAuralProps(); // Common Border, Padding, and Background Properties // only background apply, border apply if border-collapse // is collapse. - BorderAndPadding bap = propMgr.getBorderAndPadding(); - BackgroundProps bProps = propMgr.getBackgroundProps(); +// BorderAndPadding bap = propMgr.getBorderAndPadding(); +// BackgroundProps bProps = propMgr.getBackgroundProps(); // Common Relative Position Properties - RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); +// RelativePositionProps mRelProps = propMgr.getRelativePositionProps(); // this.properties.get("break-before"); // this.properties.get("break-after"); @@ -233,7 +240,6 @@ this.keepWithNext = getKeepValue("keep-with-next.within-column"); this.keepWithPrevious = getKeepValue("keep-with-previous.within-column"); - this.id = this.properties.get("id").getString(); this.minHeight = this.properties.get("height").getLength().mvalue(); setup = true; @@ -356,10 +362,15 @@ int rowSpan = cell.getNumRowsSpanned(); + if (rowSpan > 1) + cell.resetMarker(); int status; if (Status.isIncomplete((status = cell.layout(areaContainer)))) { - if ((keepTogether.getType() == KeepValue.KEEP_WITH_ALWAYS && bIgnoreKeepTogether==false) - || (status == Status.AREA_FULL_NONE) + if (keepTogether.getType() == KeepValue.KEEP_WITH_ALWAYS && bIgnoreKeepTogether==false){ + this.resetMarker(); + this.removeID(area.getIDReferences()); + return Status.AREA_FULL_NONE; + } else if ((status == Status.AREA_FULL_NONE) || rowSpan > 1) { // We will put this row into the next column/page // Note: the only time this shouldn't be honored is @@ -367,14 +378,22 @@ // Remove spanning cells from RowSpanMgr? this.resetMarker(); this.removeID(area.getIDReferences()); - return Status.AREA_FULL_NONE; + rowSpanMgr.finishRow(largestCellHeight, false); + rowSpanMgr.setForceFinishSpans(largestCellHeight); + cellArray.setForceCellsStart(); + return Status.FORCE_PAGE_BREAK; } else if (status == Status.AREA_FULL_SOME) { /* * Row is not keep-together, cell isn't spanning * and part of it fits. We can break the cell and * the row. */ - someCellDidNotLayoutCompletely = true; + this.resetMarker(); + this.removeID(area.getIDReferences()); + rowSpanMgr.finishRow(largestCellHeight, false); + rowSpanMgr.setForceFinishSpans(largestCellHeight); + cellArray.setForceCellsStart(); + return Status.FORCE_PAGE_BREAK; } } // else { // layout was complete for a particular cell @@ -404,7 +423,8 @@ // Adjust spanning row information // ??? what if some cells are broken??? - rowSpanMgr.finishRow(largestCellHeight); + rowSpanMgr.finishRow(largestCellHeight, + !someCellDidNotLayoutCompletely ); area.addChild(areaContainer); areaContainer.setHeight(largestCellHeight); diff -Nur fop-0.20.5-dist/src/org/apache/fop/layout/BodyAreaContainer.java fop-0.20.5/src/org/apache/fop/layout/BodyAreaContainer.java --- fop-0.20.5-dist/src/org/apache/fop/layout/BodyAreaContainer.java 2005-02-07 19:44:06.000000000 +0600 +++ fop-0.20.5/src/org/apache/fop/layout/BodyAreaContainer.java 2005-04-01 11:57:09.000000000 +0700 @@ -84,12 +84,12 @@ private int mainRefAreaHeight; // reference area yPositions - private int mainYPosition; - private int beforeFloatYPosition; - private int footnoteYPosition; +// private int mainYPosition; +// private int beforeFloatYPosition; +// private int footnoteYPosition; // the start FO in case of rollback - private FObj startFO; +// private FObj startFO; private boolean isNewSpanArea; // keeps track of footnote state for multiple layouts @@ -377,42 +377,42 @@ return footnoteState; } - public boolean needsFootnoteAdjusting() { - footnoteYPosition = footnoteReferenceArea.getYPosition(); - switch (footnoteState) { - case 0: - resetHeights(); - if (footnoteReferenceArea.getHeight() > 0 - && mainYPosition + mainReferenceArea.getHeight() - > footnoteYPosition) { - return true; - } - case 1: - break; - } - return false; - } - - public void adjustFootnoteArea() { - footnoteState++; - if (footnoteState == 1) { - mainReferenceArea.setMaxHeight(footnoteReferenceArea.getYPosition() - - mainYPosition); - footnoteYPosition = footnoteReferenceArea.getYPosition(); - footnoteReferenceArea.setMaxHeight(footnoteReferenceArea.getHeight()); - - ArrayList children = footnoteReferenceArea.getChildren(); - for (int i = 0; i < children.size(); i++) { - Object obj = children.get(i); - if (obj instanceof Area) { - Area childArea = (Area)obj; - footnoteReferenceArea.removeChild(childArea); - } - } - - getPage().setPendingFootnotes(null); - } - } +// public boolean needsFootnoteAdjusting() { +// footnoteYPosition = footnoteReferenceArea.getYPosition(); +// switch (footnoteState) { +// case 0: +// resetHeights(); +// if (footnoteReferenceArea.getHeight() > 0 +// && mainYPosition + mainReferenceArea.getHeight() +// > footnoteYPosition) { +// return true; +// } +// case 1: +// break; +// } +// return false; +// } +// +// public void adjustFootnoteArea() { +// footnoteState++; +// if (footnoteState == 1) { +// mainReferenceArea.setMaxHeight(footnoteReferenceArea.getYPosition() +// - mainYPosition); +// footnoteYPosition = footnoteReferenceArea.getYPosition(); +// footnoteReferenceArea.setMaxHeight(footnoteReferenceArea.getHeight()); +// +// ArrayList children = footnoteReferenceArea.getChildren(); +// for (int i = 0; i < children.size(); i++) { +// Object obj = children.get(i); +// if (obj instanceof Area) { +// Area childArea = (Area)obj; +// footnoteReferenceArea.removeChild(childArea); +// } +// } +// +// getPage().setPendingFootnotes(null); +// } +// } protected static void resetMaxHeight(Area ar, int change) { ar.setMaxHeight(change); -- Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.
