]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
AHS: addressing break boundary conditions
authorarved <arved@unknown>
Fri, 13 Jul 2001 02:31:14 +0000 (02:31 +0000)
committerarved <arved@unknown>
Fri, 13 Jul 2001 02:31:14 +0000 (02:31 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194351 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/fo/PropertyManager.java
src/org/apache/fop/fo/flow/Block.java
src/org/apache/fop/layout/Area.java

index 9abc0e82d6719e5c521c4790851e6c33da549e4c..e659dc05306bbac6734148e0821b39f3f8cb715b 100644 (file)
@@ -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;
index 582a79091d13699ef757ff24abc6067bcaa652da..73830f7c7b3d55f802d87c73c69c8786a5b1c841 100644 (file)
@@ -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 <jtauber@jtauber.com>. For more  information on the Apache
- Software Foundation, please see <http://www.apache.org/>.
-
+/*-- $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);
                                }
index 9d5297e1bf4f3d9324f1874756966d8c2e2e8942..247a048782a144ff8d1c1a364724f485b962074f 100644 (file)
@@ -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()