Author: spepping Date: Tue Nov 27 12:04:49 2007 New Revision: 598753 URL: http://svn.apache.org/viewvc?rev=598753&view=rev Log: Merged revisions 597200-598745 via svnmerge from https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk
........ r597448 | jeremias | 2007-11-22 17:13:05 +0100 (Thu, 22 Nov 2007) | 2 lines First draft of a possible new intermediate format for Apache FOP. Details on: http://wiki.apache.org/xmlgraphics-fop/AreaTreeIntermediateXml/NewDesign ........ r598558 | jeremias | 2007-11-27 09:36:23 +0100 (Tue, 27 Nov 2007) | 6 lines Bugzilla #40230: Bugfix: no empty page is generated anymore if there's no content after a break-after. Bugzilla #43917: Bugfix for border-after painting and element list generation when a forced break is involved. ........ Added: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/ - copied from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/README.txt - copied unchanged from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/README.txt xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/example1.xml - copied unchanged from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/example1.xml xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-content.xsd - copied unchanged from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-content.xsd xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-datatypes.xsd - copied unchanged from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/fop-intermediate-format-ng-datatypes.xsd xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/fop-intermediate-format-ng.xsd - copied unchanged from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/fop-intermediate-format-ng.xsd xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/xmp-metadata.xsd - copied unchanged from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/xmp-metadata.xsd xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/documentation/intermediate-format-ng/xmp-rdf-metadata.xsd - copied unchanged from r598558, xmlgraphics/fop/trunk/src/documentation/intermediate-format-ng/xmp-rdf-metadata.xsd xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/block_border_bug43917.xml - copied unchanged from r598558, xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/block_border_bug43917.xml Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/ (props changed) xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BreakElement.java xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/SpaceResolver.java xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/status.xml xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/disabled-testcases.xml xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/page-production_empty_block_only.xml xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_block_break-after.xml xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_conditional-spaces_1.xml Propchange: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/ ------------------------------------------------------------------------------ --- svnmerge-integrated (original) +++ svnmerge-integrated Tue Nov 27 12:04:49 2007 @@ -1 +1 @@ -/xmlgraphics/fop/trunk:1-597199 +/xmlgraphics/fop/trunk:1-598745 Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java Tue Nov 27 12:04:49 2007 @@ -26,9 +26,10 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.apache.fop.area.Area; -import org.apache.fop.area.BlockParent; import org.apache.fop.area.Block; +import org.apache.fop.area.BlockParent; import org.apache.fop.fo.FObj; import org.apache.fop.fo.properties.CommonBorderPaddingBackground; import org.apache.fop.fo.properties.SpaceProperty; @@ -225,9 +226,7 @@ return contentIPD; } - /** - * [EMAIL PROTECTED] - */ + /** [EMAIL PROTECTED] */ public LinkedList getNextKnuthElements(LayoutContext context, int alignment) { //log.debug("BLM.getNextKnuthElements> keep-together = " // + layoutProps.keepTogether.getType()); @@ -266,6 +265,9 @@ //Spaces, border and padding to be repeated at each break addPendingMarks(context); + //Used to indicate a special break-after case when all content has already been generated. + BreakElement forcedBreakAfterLast = null; + while ((curLM = (BlockLevelLayoutManager) getChildLM()) != null) { LayoutContext childLC = new LayoutContext(0); childLC.copyPendingMarksFrom(context); @@ -292,17 +294,14 @@ && returnedList.size() == 1 && ((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; - // all this block, including space before, will be put in - // the - // following page - bSpaceBeforeServed = false; - }*/ contentList.addAll(returnedList); + if (curLM.isFinished() && !hasNextChildLM()) { + forcedBreakAfterLast = (BreakElement)contentList.removeLast(); + context.clearPendingMarks(); + break; + } + /* extension: conversione di tutta la sequenza fin'ora ottenuta */ if (bpUnit > 0) { storedList = contentList; @@ -349,6 +348,11 @@ contentList.addAll(returnedList); if (((ListElement) returnedList.getLast()).isForcedBreak()) { // a descendant of this block has break-after + if (curLM.isFinished() && !hasNextChildLM()) { + forcedBreakAfterLast = (BreakElement)contentList.removeLast(); + context.clearPendingMarks(); + break; + } /* extension: conversione di tutta la sequenza fin'ora ottenuta */ if (bpUnit > 0) { @@ -380,7 +384,7 @@ returnedList = new LinkedList(); if (contentList.size() > 0) { wrapPositionElements(contentList, returnList); - } else { + } else if (forcedBreakAfterLast == null) { // Empty fo:block, zero-length box makes sure the IDs and/or markers // are registered. returnList.add(new KnuthBox(0, notifyPos(new Position(this)), true)); @@ -388,8 +392,15 @@ addKnuthElementsForBorderPaddingAfter(returnList, true); addKnuthElementsForSpaceAfter(returnList, alignment); - addKnuthElementsForBreakAfter(returnList, context); + if (forcedBreakAfterLast == null) { + addKnuthElementsForBreakAfter(returnList, context); + } + if (forcedBreakAfterLast != null) { + forcedBreakAfterLast.clearPendingMarks(); + wrapPositionElement(forcedBreakAfterLast, returnList, false); + } + if (mustKeepWithNext()) { context.setFlags(LayoutContext.KEEP_WITH_NEXT_PENDING); } @@ -1455,14 +1466,25 @@ while (listIter.hasNext()) { ListElement tempElement; tempElement = (ListElement) listIter.next(); - if (force || tempElement.getLayoutManager() != this) { - tempElement.setPosition(notifyPos(new NonLeafPosition(this, - tempElement.getPosition()))); - } - targetList.add(tempElement); + wrapPositionElement(tempElement, targetList, force); + } + } + + /** + * "wrap" the Position inside the given element and add it to the target list. + * @param el the list element + * @param targetList target list receiving the wrapped position elements + * @param force if true, every Position is wrapped regardless of its LM of origin + */ + protected void wrapPositionElement(ListElement el, List targetList, boolean force) { + if (force || el.getLayoutManager() != this) { + el.setPosition(notifyPos(new NonLeafPosition(this, + el.getPosition()))); } + targetList.add(el); } + /** @return the sum of start-indent and end-indent */ protected int getIPIndents() { return startIndent + endIndent; Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BreakElement.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BreakElement.java?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BreakElement.java (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/BreakElement.java Tue Nov 27 12:04:49 2007 @@ -119,6 +119,16 @@ return this.pendingAfterMarks; } + /** + * Clears all pending marks associated with this break element. This is used in break + * cases where we only know very late if the break is actually after all the content + * of an FO has been generated. + */ + public void clearPendingMarks() { + this.pendingBeforeMarks = null; + this.pendingAfterMarks = null; + } + /** [EMAIL PROTECTED] */ public String toString() { StringBuffer sb = new StringBuffer(); Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java Tue Nov 27 12:04:49 2007 @@ -19,16 +19,17 @@ package org.apache.fop.layoutmgr; +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.fo.pagination.Flow; -import org.apache.fop.layoutmgr.inline.InlineLevelLayoutManager; + import org.apache.fop.area.Area; import org.apache.fop.area.BlockParent; - -import java.util.LinkedList; -import java.util.List; -import java.util.ListIterator; +import org.apache.fop.fo.pagination.Flow; +import org.apache.fop.layoutmgr.inline.InlineLevelLayoutManager; /** * LayoutManager for an fo:flow object. @@ -132,6 +133,13 @@ if (returnedList.size() > 0) { returnList.addAll(returnedList); if (ElementListUtils.endsWithForcedBreak(returnList)) { + if (curLM.isFinished() && !hasNextChildLM()) { + //If the layout manager is finished at this point, the pending + //marks become irrelevant. + childLC.clearPendingMarks(); + //setFinished(true); + break; + } // a descendant of this flow has break-after return returnList; } Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/LayoutContext.java Tue Nov 27 12:04:49 2007 @@ -23,9 +23,9 @@ import java.util.List; import org.apache.fop.fo.Constants; +import org.apache.fop.layoutmgr.inline.AlignmentContext; import org.apache.fop.layoutmgr.inline.HyphContext; import org.apache.fop.traits.MinOptMax; -import org.apache.fop.layoutmgr.inline.AlignmentContext; /** @@ -262,6 +262,18 @@ return Collections.unmodifiableList(this.pendingAfterMarks); } else { return null; + } + } + + /** + * Clears all pending marks on the LayoutContext. + */ + public void clearPendingMarks() { + if (this.pendingBeforeMarks != null) { + this.pendingBeforeMarks.clear(); + } + if (this.pendingAfterMarks != null) { + this.pendingAfterMarks.clear(); } } Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/SpaceResolver.java URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/SpaceResolver.java?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/SpaceResolver.java (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/src/java/org/apache/fop/layoutmgr/SpaceResolver.java Tue Nov 27 12:04:49 2007 @@ -25,6 +25,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.apache.fop.traits.MinOptMax; /** @@ -441,7 +442,6 @@ glue2shrink -= glue3.opt - glue3.min; boolean hasPrecedingNonBlock = false; - boolean forcedBreak = false; if (log.isDebugEnabled()) { log.debug("noBreakLength=" + noBreakLength + ", glue1=" + glue1 @@ -449,11 +449,16 @@ + ", glue3=" + glue3); } if (breakPoss != null) { + boolean forcedBreak = breakPoss.isForcedBreak(); 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)); + if (forcedBreak) { + //Otherwise, the preceding penalty and glue will be cut off + iter.add(new KnuthBox(0, (Position)null, true)); + } } iter.add(new KnuthPenalty(breakPoss.getPenaltyWidth(), breakPoss.getPenaltyValue(), false, breakPoss.getBreakClass(), Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/status.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/status.xml?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/status.xml (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/status.xml Tue Nov 27 12:04:49 2007 @@ -28,6 +28,14 @@ <changes> <release version="FOP Trunk"> + <action context="Code" dev="JM" type="fix" fixes-bug="43917"> + Bugfix for border-after painting and element list generation when a + forced break is involved. + </action> + <action context="Code" dev="JM" type="fix" fixes-bug="40230"> + Bugfix: no empty page is generated anymore if there's no content + after a break-after. + </action> <action context="Code" dev="VH" type="fix" fixes-bug="43803"> Restored proper handling of fo:table-cell having no children, which is allowed in relaxed validation mode. Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/disabled-testcases.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/disabled-testcases.xml?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/disabled-testcases.xml (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/disabled-testcases.xml Tue Nov 27 12:04:49 2007 @@ -307,13 +307,6 @@ added to the area tree.</description> </testcase> <testcase> - <name>Bugzilla #40230: invalid extra page break</name> - <file>block_break-after_bug40230.xml</file> - <description>Currently an extra page is created even if there is nothing - after a block with break-after="page"</description> - <reference>http://issues.apache.org/bugzilla/show_bug.cgi?id=40230</reference> - </testcase> - <testcase> <name>Soft hyphen with normal hyphenation enabled</name> <file>block_shy_linebreaking_hyph.xml</file> <description>A soft hyphen should be a preferred as break compared to a Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/page-production_empty_block_only.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/page-production_empty_block_only.xml?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/page-production_empty_block_only.xml (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/page-production_empty_block_only.xml Tue Nov 27 12:04:49 2007 @@ -51,5 +51,9 @@ </fo> <checks> <eval expected="3" xpath="count(//pageViewport)"/> + <element-list category="breaker" index="1"> + <box w="0" aux="true"/> <!-- auxiliary box for empty box --> + <skip>3</skip> + </element-list> </checks> </testcase> Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_block_break-after.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_block_break-after.xml?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_block_break-after.xml (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_block_break-after.xml Tue Nov 27 12:04:49 2007 @@ -84,12 +84,10 @@ <eval expected="75000" xpath="//[EMAIL PROTECTED]//flow/block[1]/block[1]/@ipda"/> <eval expected="20800" xpath="//[EMAIL PROTECTED]//flow/block[1]/block[1]/@bpd"/> <eval expected="28800" xpath="//[EMAIL PROTECTED]//flow/block[1]/block[1]/@bpda"/> - <!-- Two blocks expected in the second cell --> - <eval expected="2" xpath="count(//[EMAIL PROTECTED]//flow/block[1]/block[2]/block)"/> - <!-- First block has zero bpd --> - <eval expected="0" xpath="//[EMAIL PROTECTED]//flow/block[1]/block[2]/block[1]/@bpd"/> - <!-- One line in the second block --> - <eval expected="1" xpath="count(//[EMAIL PROTECTED]//flow/block[1]/block[2]/block[2]//lineArea)"/> + <!-- One block expected in the second cell --> + <eval expected="1" xpath="count(//[EMAIL PROTECTED]//flow/block[1]/block[2]/block)"/> + <!-- One line in the block --> + <eval expected="1" xpath="count(//[EMAIL PROTECTED]//flow/block[1]/block[2]/block[1]//lineArea)"/> <eval expected="63000" xpath="//[EMAIL PROTECTED]//flow/block[1]/block[2]/@ipd"/> <eval expected="75000" xpath="//[EMAIL PROTECTED]//flow/block[1]/block[2]/@ipda"/> <eval expected="16800" xpath="//[EMAIL PROTECTED]//flow/block[1]/block[2]/@bpd"/> Modified: xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_conditional-spaces_1.xml URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_conditional-spaces_1.xml?rev=598753&r1=598752&r2=598753&view=diff ============================================================================== --- xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_conditional-spaces_1.xml (original) +++ xmlgraphics/fop/branches/Temp_Interleaved_Page_Line_Breaking/test/layoutengine/standard-testcases/table-cell_conditional-spaces_1.xml Tue Nov 27 12:04:49 2007 @@ -153,7 +153,10 @@ <penalty p="0" w="0"/> <glue w="25000"/> <!-- The space between lines --> <box w="16800"/> <!-- Line 2 --> - <skip>3</skip> <!-- glue for end of page TODO missing element for border-after!! --> + <penalty p="INF" w="0"/> + <glue w="4000"/> <!-- The border after --> + <box w="0" aux="true"/> <!-- aux. box to prohibit cutting away the border --> + <skip>3</skip> <!-- glue for end of page --> </element-list> </checks> </testcase> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
