From: arved Date: Fri, 13 Jul 2001 02:31:14 +0000 (+0000) Subject: AHS: addressing break boundary conditions X-Git-Tag: PRE_CODEFORMATTING~28 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=647a58fd9213151dc5d08570829e19cdbb9a8dc6;p=xmlgraphics-fop.git AHS: addressing break boundary conditions git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194351 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/org/apache/fop/fo/PropertyManager.java b/src/org/apache/fop/fo/PropertyManager.java index 9abc0e82d..e659dc053 100644 --- a/src/org/apache/fop/fo/PropertyManager.java +++ b/src/org/apache/fop/fo/PropertyManager.java @@ -9,12 +9,15 @@ package org.apache.fop.fo; import org.apache.fop.layout.FontState; import org.apache.fop.layout.FontInfo; import org.apache.fop.layout.BorderAndPadding; +import org.apache.fop.fo.properties.BreakAfter; import org.apache.fop.fo.properties.BreakBefore; import org.apache.fop.fo.properties.Constants; import org.apache.fop.layout.HyphenationProps; import org.apache.fop.apps.FOPException; import java.text.MessageFormat; import java.text.FieldPosition; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.ColumnArea; public class PropertyManager { @@ -103,15 +106,55 @@ public class PropertyManager { return hyphProps; } - public int checkBreakBefore() { + public int checkBreakBefore(Area area) { + if (!(area instanceof ColumnArea)) + return Status.OK; + ColumnArea colArea = (ColumnArea)area; switch(properties.get("break-before").getEnum()) { case BreakBefore.PAGE: - return Status.FORCE_PAGE_BREAK; + // if first ColumnArea, and empty, return OK + if (!colArea.hasChildren() && (colArea.getColumnIndex() == 1)) + return Status.OK; + else + return Status.FORCE_PAGE_BREAK; case BreakBefore.ODD_PAGE: - return Status.FORCE_PAGE_BREAK_ODD; + // if first ColumnArea, empty, _and_ in odd page, + // return OK + if (!colArea.hasChildren() && (colArea.getColumnIndex() == 1) && + (colArea.getPage().getNumber() % 2 != 0)) + return Status.OK; + else + return Status.FORCE_PAGE_BREAK_ODD; case BreakBefore.EVEN_PAGE: + // if first ColumnArea, empty, _and_ in even page, + // return OK + if (!colArea.hasChildren() && (colArea.getColumnIndex() == 1) && + (colArea.getPage().getNumber() % 2 == 0)) + return Status.OK; + else return Status.FORCE_PAGE_BREAK_EVEN; case BreakBefore.COLUMN: + // if ColumnArea is empty return OK + if (!area.hasChildren()) + return Status.OK; + else + return Status.FORCE_COLUMN_BREAK; + default: + return Status.OK; + } + } + + public int checkBreakAfter(Area area) { + if (!(area instanceof org.apache.fop.layout.ColumnArea)) + return Status.OK; + switch(properties.get("break-after").getEnum()) { + case BreakAfter.PAGE: + return Status.FORCE_PAGE_BREAK; + case BreakAfter.ODD_PAGE: + return Status.FORCE_PAGE_BREAK_ODD; + case BreakAfter.EVEN_PAGE: + return Status.FORCE_PAGE_BREAK_EVEN; + case BreakAfter.COLUMN: return Status.FORCE_COLUMN_BREAK; default: return Status.OK; diff --git a/src/org/apache/fop/fo/flow/Block.java b/src/org/apache/fop/fo/flow/Block.java index 582a79091..73830f7c7 100644 --- a/src/org/apache/fop/fo/flow/Block.java +++ b/src/org/apache/fop/fo/flow/Block.java @@ -1,52 +1,8 @@ -/*-- $Id$ -- - - ============================================================================ - The Apache Software License, Version 1.1 - ============================================================================ - - Copyright (C) 1999 The Apache Software Foundation. All rights reserved. - - Redistribution and use in source and binary forms, with or without modifica- - tion, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. The end-user documentation included with the redistribution, if any, must - include the following acknowledgment: "This product includes software - developed by the Apache Software Foundation (http://www.apache.org/)." - Alternately, this acknowledgment may appear in the software itself, if - and wherever such third-party acknowledgments normally appear. - - 4. The names "FOP" and "Apache Software Foundation" must not be used to - endorse or promote products derived from this software without prior - written permission. For written permission, please contact - apache@apache.org. - - 5. Products derived from this software may not be called "Apache", nor may - "Apache" appear in their name, without prior written permission of the - Apache Software Foundation. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- - DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - This software consists of voluntary contributions made by many individuals - on behalf of the Apache Software Foundation and was originally created by - James Tauber . For more information on the Apache - Software Foundation, please see . - +/*-- $Id$-- */ +/* + * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. + * For details on use and redistribution please refer to the + * LICENSE file included with these sources. */ package org.apache.fop.fo.flow; @@ -147,10 +103,14 @@ public class Block extends FObjMixed { area.getIDReferences().createID(id); this.marker = 0; - int breakStatus; - if ((breakStatus = propMgr.checkBreakBefore()) != Status.OK) { - return new Status(breakStatus); - } + + // no break if first in area tree, or leading in context + // area + int breakBeforeStatus = propMgr.checkBreakBefore(area); + if (breakBeforeStatus != Status.OK) { + return new Status(breakBeforeStatus); + } + int numChildren = this.children.size(); for (int i = 0; i < numChildren; i++) { FONode fo = (FONode) children.elementAt(i); @@ -275,26 +235,14 @@ public class Block extends FObjMixed { area.start(); } - if (breakAfter == BreakAfter.PAGE) { - this.marker = BREAK_AFTER; - return new Status(Status.FORCE_PAGE_BREAK); - } - - if (breakAfter == BreakAfter.ODD_PAGE) { - this.marker = BREAK_AFTER; - return new Status(Status.FORCE_PAGE_BREAK_ODD); - } - - if (breakAfter == BreakAfter.EVEN_PAGE) { - this.marker = BREAK_AFTER; - return new Status(Status.FORCE_PAGE_BREAK_EVEN); - } - - if (breakAfter == BreakAfter.COLUMN) { - this.marker = BREAK_AFTER; - return new Status(Status.FORCE_COLUMN_BREAK); - } - + // no break if last in area tree, or trailing in context + // area + int breakAfterStatus = propMgr.checkBreakAfter(area); + if (breakAfterStatus != Status.OK) { + this.marker = BREAK_AFTER; + return new Status(breakAfterStatus); + } + if (keepWithNext != 0) { return new Status(Status.KEEP_WITH_NEXT); } diff --git a/src/org/apache/fop/layout/Area.java b/src/org/apache/fop/layout/Area.java index 9d5297e1b..247a04878 100644 --- a/src/org/apache/fop/layout/Area.java +++ b/src/org/apache/fop/layout/Area.java @@ -122,6 +122,10 @@ abstract public class Area extends Box { return this.children; } + public boolean hasChildren() { + return (this.children.size() != 0); + } + public int getContentWidth() { /* ATTENTION: this may change your output!! (Karen Lease, 4mar2001) return contentRectangleWidth - getPaddingLeft() - getPaddingRight()