klease      02/04/28 14:28:02

  Modified:    src/codegen foproperties.xml
               src/org/apache/fop/area BodyRegion.java MinOptMax.java
               src/org/apache/fop/datatypes Space.java
               src/org/apache/fop/fo FOText.java FObj.java FObjMixed.java
                        PropertyManager.java TextInfo.java
               src/org/apache/fop/fo/flow Block.java
               src/org/apache/fop/layout MarginInlineProps.java
               src/org/apache/fop/layoutmgr BlockLayoutManager.java
                        BlockStackingLayoutManager.java
                        LineLayoutManager.java SpaceSpecifier.java
  Added:       src/org/apache/fop/traits BlockProps.java InlineProps.java
                        LayoutProps.java SpaceVal.java
  Log:
  Add BreakPossibility style LayoutManager code as an alternative to
  Keiron's "direct area creation" method. Not currently enabled: to do
  so, one must make 2 changes in the source.
  
  Revision  Changes    Path
  1.31      +5 -2      xml-fop/src/codegen/foproperties.xml
  
  Index: foproperties.xml
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/codegen/foproperties.xml,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- foproperties.xml  23 Feb 2002 16:47:01 -0000      1.30
  +++ foproperties.xml  28 Apr 2002 21:28:01 -0000      1.31
  @@ -1282,8 +1282,11 @@
     <property>
       <name>word-spacing</name>
       <inherited>true</inherited>
  -    <datatype>ToBeImplemented</datatype>
  -    <default>normal</default>
  +    <use-generic>GenericSpace</use-generic>
  +    <default subproperty="precedence">force</default>
  +    <default subproperty="conditionality">discard</default>
  +    <default>0pt</default>
  +    <!-- <default>normal</default> -->
     </property>
   
   <!-- Color-related Properties -->
  
  
  
  1.5       +6 -1      xml-fop/src/org/apache/fop/area/BodyRegion.java
  
  Index: BodyRegion.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/BodyRegion.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BodyRegion.java   17 Feb 2002 21:59:29 -0000      1.4
  +++ BodyRegion.java   28 Apr 2002 21:28:01 -0000      1.5
  @@ -1,5 +1,5 @@
   /*
  - * $Id: BodyRegion.java,v 1.4 2002/02/17 21:59:29 klease Exp $
  + * $Id: BodyRegion.java,v 1.5 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -29,6 +29,11 @@
       // Number of columns when not spanning
       public void setColumnCount(int colCount) {
        this.columnCount = colCount;
  +    }
  +
  +    // Number of columns when not spanning
  +    public int getColumnCount() {
  +     return this.columnCount ;
       }
   
       // A length (mpoints)
  
  
  
  1.3       +17 -2     xml-fop/src/org/apache/fop/area/MinOptMax.java
  
  Index: MinOptMax.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/area/MinOptMax.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MinOptMax.java    11 Nov 2001 14:10:29 -0000      1.2
  +++ MinOptMax.java    28 Apr 2002 21:28:01 -0000      1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: MinOptMax.java,v 1.2 2001/11/11 14:10:29 klease Exp $
  + * $Id: MinOptMax.java,v 1.3 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -14,7 +14,7 @@
    * variables are package visible.
    */
   
  -public class MinOptMax implements java.io.Serializable {
  +public class MinOptMax implements java.io.Serializable, Cloneable {
   
       /** Publicly visible min(imum), opt(imum) and max(imum) values.*/
       public int min;
  @@ -35,6 +35,15 @@
        this.max = max;
       }
   
  +    public Object clone() {
  +     try {
  +         return super.clone();
  +     } catch (CloneNotSupportedException ex) {
  +         // SHOULD NEVER OCCUR - all members are primitive types!
  +         return null;
  +     }
  +    }
  +
       public static MinOptMax subtract(MinOptMax op1, MinOptMax op2) {
        return new MinOptMax(op1.min - op2.max, op1.opt - op2.opt,
                             op1.max - op2.min);
  @@ -43,6 +52,12 @@
       public static MinOptMax add(MinOptMax op1, MinOptMax op2) {
        return new MinOptMax(op1.min + op2.min, op1.opt + op2.opt,
                             op1.max + op2.max);
  +    }
  +
  +    public static MinOptMax multiply(MinOptMax op1, double mult) {
  +     return new MinOptMax((int)(op1.min * mult),
  +                          (int)(op1.opt * mult),
  +                          (int)(op1.max * mult));
       }
   
       public void add(MinOptMax op) {
  
  
  
  1.6       +1 -7      xml-fop/src/org/apache/fop/datatypes/Space.java
  
  Index: Space.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/datatypes/Space.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- Space.java        30 Jul 2001 20:29:19 -0000      1.5
  +++ Space.java        28 Apr 2002 21:28:01 -0000      1.6
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Space.java,v 1.5 2001/07/30 20:29:19 tore Exp $
  + * $Id: Space.java,v 1.6 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -50,12 +50,6 @@
       public Property getPrecedence() {
           return this.precedence;
       }
  -
  -    /*
  -     * public boolean isDiscard() {
  -     * return (this.conditionality == DISCARD);
  -     * }
  -     */
   
       public Property getConditionality() {
           return this.conditionality;
  
  
  
  1.33      +4 -1      xml-fop/src/org/apache/fop/fo/FOText.java
  
  Index: FOText.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FOText.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- FOText.java       26 Apr 2002 09:40:56 -0000      1.32
  +++ FOText.java       28 Apr 2002 21:28:01 -0000      1.33
  @@ -1,5 +1,5 @@
   /*
  - * $Id: FOText.java,v 1.32 2002/04/26 09:40:56 keiron Exp $
  + * $Id: FOText.java,v 1.33 2002/04/28 21:28:01 klease Exp $
    * 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."
  @@ -17,6 +17,7 @@
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.layoutmgr.LayoutManager;
   import org.apache.fop.layoutmgr.TextLayoutManager;
  +import org.apache.fop.layoutmgr.TextBPLayoutManager;
   
   import java.util.NoSuchElementException;
   import java.util.List;
  @@ -81,6 +82,8 @@
               System.arraycopy(tmp, 0, ca, 0, length);
           }
           list.add(new TextLayoutManager(this, ca, textInfo));
  +     // TEST VARIANT USING Karen's BreakPoss scheme
  +        // list.add(new TextBPLayoutManager(this, ca, textInfo));
       }
   
       public CharIterator charIterator() {
  
  
  
  1.30      +10 -1     xml-fop/src/org/apache/fop/fo/FObj.java
  
  Index: FObj.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObj.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- FObj.java 26 Apr 2002 09:40:56 -0000      1.29
  +++ FObj.java 28 Apr 2002 21:28:01 -0000      1.30
  @@ -1,5 +1,5 @@
   /*
  - * $Id: FObj.java,v 1.29 2002/04/26 09:40:56 keiron Exp $
  + * $Id: FObj.java,v 1.30 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -378,5 +378,14 @@
       public ArrayList getMarkers() {
           return new ArrayList(markers.values());
       }
  +
  +    /**
  +     * lets layout managers access FO properties via PropertyManager
  +     * @return the property manager for this FO
  +     */
  +    public PropertyManager getPropertyManager() {
  +        return this.propMgr;
  +    }
  +
   }
   
  
  
  
  1.22      +6 -21     xml-fop/src/org/apache/fop/fo/FObjMixed.java
  
  Index: FObjMixed.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/FObjMixed.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- FObjMixed.java    26 Apr 2002 09:40:56 -0000      1.21
  +++ FObjMixed.java    28 Apr 2002 21:28:01 -0000      1.22
  @@ -1,5 +1,5 @@
   /*
  - * $Id: FObjMixed.java,v 1.21 2002/04/26 09:40:56 keiron Exp $
  + * $Id: FObjMixed.java,v 1.22 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -45,26 +45,11 @@
       }
   
       protected void addCharacters(char data[], int start, int length) {
  -        if (textInfo == null) {
  -            textInfo = new TextInfo();
  -
  -            try {
  -                textInfo.fs = propMgr.getFontState(fontInfo);
  -            } catch (FOPException fopex) {
  -                log.error("Error setting FontState for characters: " +
  -                          fopex.getMessage());
  -            }
  -
  -            ColorType c = getProperty("color").getColorType();
  -            textInfo.color = c;
  -
  -            textInfo.verticalAlign =
  -              getProperty("vertical-align").getEnum();
  -
  -            textInfo.wrapOption = getProperty("wrap-option").getEnum();
  -            textInfo.whiteSpaceCollapse =
  -              getProperty("white-space-collapse").getEnum();
  -
  +        if(textInfo == null) {
  +         // Really only need one of these, but need to get fontInfo
  +         // stored in propMgr for later use.
  +         propMgr.setFontInfo(fontInfo);
  +         textInfo = propMgr.getTextLayoutProps(fontInfo);
           }
   
           FOText ft = new FOText(data, start, length, textInfo);
  
  
  
  1.10      +88 -2     xml-fop/src/org/apache/fop/fo/PropertyManager.java
  
  Index: PropertyManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/PropertyManager.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- PropertyManager.java      18 Feb 2002 22:49:22 -0000      1.9
  +++ PropertyManager.java      28 Apr 2002 21:28:01 -0000      1.10
  @@ -1,5 +1,5 @@
   /*
  - * $Id: PropertyManager.java,v 1.9 2002/02/18 22:49:22 klease Exp $
  + * $Id: PropertyManager.java,v 1.10 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -11,20 +11,26 @@
   import java.awt.geom.Rectangle2D;
   import org.apache.fop.area.CTM;
   import org.apache.fop.datatypes.FODimension;
  +import org.apache.fop.fo.TextInfo; // should be somewhere else probably...
   import org.apache.fop.layout.FontState;
   import org.apache.fop.layout.FontInfo;
   import org.apache.fop.layout.BorderAndPadding;
   import org.apache.fop.layout.MarginProps;
  -import org.apache.fop.layout.BackgroundProps;
   import org.apache.fop.layout.MarginInlineProps;
  +import org.apache.fop.layout.BackgroundProps;
   import org.apache.fop.layout.AccessibilityProps;
   import org.apache.fop.layout.AuralProps;
   import org.apache.fop.layout.RelativePositionProps;
   import org.apache.fop.layout.AbsolutePositionProps;
  +import org.apache.fop.traits.BlockProps;
  +import org.apache.fop.traits.InlineProps;
  +import org.apache.fop.traits.SpaceVal;
  +import org.apache.fop.traits.LayoutProps;  // keep, break, span, space?
   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.fo.properties.WritingMode;
  +import org.apache.fop.fo.properties.Span;
   import org.apache.fop.layout.HyphenationProps;
   import org.apache.fop.apps.FOPException;
   import java.text.MessageFormat;
  @@ -35,9 +41,11 @@
   public class PropertyManager {
   
       private PropertyList properties;
  +    private FontInfo m_fontInfo = null;
       private FontState fontState = null;
       private BorderAndPadding borderAndPadding = null;
       private HyphenationProps hyphProps = null;
  +    private TextInfo textInfo = null;
   
       private String[] saLeft;
       private String[] saRight;
  @@ -57,6 +65,10 @@
           this.properties = pList;
       }
   
  +    public void setFontInfo(FontInfo fontInfo) {
  +     m_fontInfo = fontInfo;
  +    }
  +
       private void initDirections() {
           saLeft = new String[1];
           saRight = new String[1];
  @@ -70,6 +82,12 @@
   
       public FontState getFontState(FontInfo fontInfo) throws FOPException {
           if (fontState == null) {
  +         if (fontInfo == null) {
  +             fontInfo = m_fontInfo;
  +         }
  +         else if (m_fontInfo == null) {
  +             m_fontInfo = fontInfo;
  +         }
               String fontFamily = properties.get("font-family").getString();
               String fontStyle = properties.get("font-style").getString();
               String fontWeight = properties.get("font-weight").getString();
  @@ -227,6 +245,15 @@
           return props;
       }
   
  +    public InlineProps getInlineProps() {
  +        InlineProps props = new InlineProps();
  +        props.spaceStart = new SpaceVal(properties.get("space-start").
  +                                     getSpace());
  +        props.spaceEnd = new SpaceVal(properties.get("space-end").
  +                                     getSpace());
  +        return props;
  +    }
  +
       public AccessibilityProps getAccessibilityProps() {
           AccessibilityProps props = new AccessibilityProps();
           String str;
  @@ -254,6 +281,65 @@
       public AbsolutePositionProps getAbsolutePositionProps() {
           AbsolutePositionProps props = new AbsolutePositionProps();
           return props;
  +    }
  +
  +    public BlockProps getBlockProps() {
  +        BlockProps props = new BlockProps();
  +        props.firstIndent = this.properties.get("text-indent").
  +         getLength().mvalue();
  +        props.lastIndent = 0; 
/*this.properties.get("last-line-end-indent").getLength().mvalue(); */
  +        props.textAlign = this.properties.get("text-align").getEnum();
  +        props.textAlignLast = this.properties.get("text-align-last").
  +         getEnum();
  +     props.lineStackType = this.properties.
  +         get("line-stacking-strategy").getEnum();
  +
  +        return props;
  +    }
  +
  +    public LayoutProps getLayoutProps() {
  +        LayoutProps props = new LayoutProps();
  +        props.breakBefore = this.properties.get("break-before").getEnum();
  +        props.breakAfter = this.properties.get("break-after").getEnum();
  +     props.bIsSpan = (this.properties.get("span").getEnum() == Span.ALL);
  +        props.spaceBefore = new SpaceVal(this.properties.get("space-before").
  +                                      getSpace());
  +        props.spaceAfter = new SpaceVal(this.properties.get("space-after").
  +                                     getSpace());
  +        return props;
  +    }
  +
  +    public TextInfo getTextLayoutProps(FontInfo fontInfo) {
  +     if (textInfo == null) {
  +         textInfo = new TextInfo();
  +         try {
  +             textInfo.fs = getFontState(fontInfo);
  +         } catch (FOPException fopex) {
  +             /* log.error("Error setting FontState for characters: " +
  +                fopex.getMessage());*/
  +             // Now what should we do ???
  +         }
  +         textInfo.color = properties.get("color").getColorType();
  +
  +         textInfo.verticalAlign =
  +                properties.get("vertical-align").getEnum();
  +
  +         textInfo.wrapOption = properties.get("wrap-option").getEnum();
  +         textInfo.bWrap = (textInfo.wrapOption == Constants.WRAP);
  +
  +         textInfo.wordSpacing =
  +             new SpaceVal(properties.get("word-spacing").getSpace());
  +
  +         /* textInfo.letterSpacing =
  +            new SpaceVal(properties.get("letter-spacing").getSpace());*/
  +
  +         textInfo.whiteSpaceCollapse =
  +                properties.get("white-space-collapse").getEnum();
  +
  +         textInfo.lineHeight = this.properties.
  +             get("line-height").getLength().mvalue();
  +     }
  +     return textInfo;
       }
   
       public CTM getCTMandRelDims(Rectangle2D absVPrect, FODimension reldims) {
  
  
  
  1.3       +11 -11    xml-fop/src/org/apache/fop/fo/TextInfo.java
  
  Index: TextInfo.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/TextInfo.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TextInfo.java     2 Apr 2002 11:50:58 -0000       1.2
  +++ TextInfo.java     28 Apr 2002 21:28:01 -0000      1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: TextInfo.java,v 1.2 2002/04/02 11:50:58 keiron Exp $
  + * $Id: TextInfo.java,v 1.3 2002/04/28 21:28:01 klease Exp $
    * 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."
  @@ -8,27 +8,27 @@
   package org.apache.fop.fo;
   
   // FOP
  -import org.apache.fop.layout.Area;
  -import org.apache.fop.layout.BlockArea;
   import org.apache.fop.layout.FontState;
  -import org.apache.fop.layout.*;
  -import org.apache.fop.datatypes.*;
  -import org.apache.fop.fo.properties.*;
  -import org.apache.fop.apps.FOPException;
  -import org.apache.fop.layoutmgr.LayoutManager;
  -import org.apache.fop.layoutmgr.TextLayoutManager;
  -
  -import java.util.NoSuchElementException;
  +import org.apache.fop.datatypes.ColorType;
  +import org.apache.fop.traits.SpaceVal;
   
   /**
  + * Collection of properties used in
    */
       public class TextInfo {
           public FontState fs;
           public ColorType color;
           public int wrapOption;
  +        public boolean bWrap ; // True if wrap-option = WRAP
           public int whiteSpaceCollapse;
           public int verticalAlign;
           public int lineHeight;
  +
  +     // Props used for calculating inline-progression-dimension
  +        public SpaceVal wordSpacing;
  +        public SpaceVal letterSpacing;
  +
  +     // Add hyphenation props too
   
           // Textdecoration
           public boolean underlined = false;
  
  
  
  1.53      +2 -16     xml-fop/src/org/apache/fop/fo/flow/Block.java
  
  Index: Block.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/fo/flow/Block.java,v
  retrieving revision 1.52
  retrieving revision 1.53
  diff -u -r1.52 -r1.53
  --- Block.java        26 Apr 2002 09:40:56 -0000      1.52
  +++ Block.java        28 Apr 2002 21:28:01 -0000      1.53
  @@ -1,5 +1,5 @@
   /*
  - * $Id: Block.java,v 1.52 2002/04/26 09:40:56 keiron Exp $
  + * $Id: Block.java,v 1.53 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -376,21 +376,7 @@
   
       public void addLayoutManager(List list) {
           BlockLayoutManager blm = new BlockLayoutManager(this);
  -        TextInfo ti = new TextInfo();
  -
  -        try {
  -            ti.fs = propMgr.getFontState(fontInfo);
  -        } catch (FOPException fopex) {
  -            log.error("Error setting FontState for characters: " +
  -                      fopex.getMessage());
  -        }
  -        ti.lineHeight = this.lineHeight;
  -
  -        ColorType c = getProperty("color").getColorType();
  -        ti.color = c;
  -
  -        ti.verticalAlign = getProperty("vertical-align").getEnum();
  -
  +        TextInfo ti = propMgr.getTextLayoutProps(fontInfo);
           blm.setBlockTextInfo(ti);
           list.add(blm);
       }
  
  
  
  1.2       +5 -6      xml-fop/src/org/apache/fop/layout/MarginInlineProps.java
  
  Index: MarginInlineProps.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layout/MarginInlineProps.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MarginInlineProps.java    6 Aug 2001 09:14:24 -0000       1.1
  +++ MarginInlineProps.java    28 Apr 2002 21:28:01 -0000      1.2
  @@ -1,5 +1,5 @@
   /*
  - * $Id: MarginInlineProps.java,v 1.1 2001/08/06 09:14:24 keiron Exp $
  + * $Id: MarginInlineProps.java,v 1.2 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -7,8 +7,9 @@
   
   package org.apache.fop.layout;
   
  +
   /**
  - * Store all hyphenation related properties on an FO.
  + * Store all inline "margin" related properties
    * Public "structure" allows direct member access.
    */
   public class MarginInlineProps {
  @@ -16,10 +17,8 @@
       public int marginBottom;
       public int marginLeft;
       public int marginRight;
  -    public int spaceBefore;
  -    public int spaceAfter;
  -    public int startIndent;
  -    public int endIndent;
  +    public int spaceStart;
  +    public int spaceEnd;
   
       public MarginInlineProps() {}
   
  
  
  
  1.7       +8 -3      xml-fop/src/org/apache/fop/layoutmgr/BlockLayoutManager.java
  
  Index: BlockLayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/BlockLayoutManager.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- BlockLayoutManager.java   26 Apr 2002 09:40:57 -0000      1.6
  +++ BlockLayoutManager.java   28 Apr 2002 21:28:01 -0000      1.7
  @@ -1,5 +1,5 @@
   /*
  - * $Id: BlockLayoutManager.java,v 1.6 2002/04/26 09:40:57 keiron Exp $
  + * $Id: BlockLayoutManager.java,v 1.7 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -58,7 +58,7 @@
       public boolean generateAreas() {
           ArrayList lms = new ArrayList();
           LayoutManager lm = null;
  -
  +     FObj curFobj = fobj;
           if (fobj != null) {
               ListIterator children = fobj.getChildren();
               while (children.hasNext()) {
  @@ -83,8 +83,13 @@
                           break;
                       }
                   }
  -                lm = new LineLayoutManager(inlines, lineHeight, lead,
  +                lm = new LineLayoutManager(curFobj, inlines, lineHeight, lead,
                                              follow);
  +             // !!!! To test BreakPoss Line LayoutManager, uncomment!
  +             /*
  +                lm = new LineBPLayoutManager(curFobj, inlines, lineHeight,
  +                                             lead, follow);
  +             */
                   lms.set(count, lm);
               }
               lm.setParentLM(this);
  
  
  
  1.5       +3 -3      
xml-fop/src/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java
  
  Index: BlockStackingLayoutManager.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- BlockStackingLayoutManager.java   26 Apr 2002 09:40:57 -0000      1.4
  +++ BlockStackingLayoutManager.java   28 Apr 2002 21:28:01 -0000      1.5
  @@ -1,5 +1,5 @@
   /*
  - * $Id: BlockStackingLayoutManager.java,v 1.4 2002/04/26 09:40:57 keiron Exp $
  + * $Id: BlockStackingLayoutManager.java,v 1.5 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -117,13 +117,13 @@
   
   
       protected MinOptMax resolveSpaceSpecifier(Area nextArea) {
  -        SpaceSpecifier spaceSpec = new SpaceSpecifier();
  +        SpaceSpecifier spaceSpec = new SpaceSpecifier(false);
           //   Area prevArea = getCurrentArea().getLast();
           //   if (prevArea != null) {
           //       spaceSpec.addSpace(prevArea.getSpaceAfter());
           //   }
           //   spaceSpec.addSpace(nextArea.getSpaceBefore());
  -        return spaceSpec.resolve();
  +        return spaceSpec.resolve(false);
       }
   
       /**
  
  
  
  1.7       +10 -10    xml-fop/src/org/apache/fop/layoutmgr/LineLayoutManager.java
  
  Index: LineLayoutManager.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/LineLayoutManager.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- LineLayoutManager.java    26 Apr 2002 09:40:57 -0000      1.6
  +++ LineLayoutManager.java    28 Apr 2002 21:28:01 -0000      1.7
  @@ -1,5 +1,5 @@
   /*
  - * $Id: LineLayoutManager.java,v 1.6 2002/04/26 09:40:57 keiron Exp $
  + * $Id: LineLayoutManager.java,v 1.7 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -44,7 +44,7 @@
    *
    * How do we handle Unicode BIDI?
    */
  -public class LineLayoutManager extends AbstractLayoutManager {
  +public class LineLayoutManager extends AbstractBPLayoutManager {
       private LineInfo currentLine = null;
       private boolean bFirstLine = true;
       private MinOptMax totalIPD;
  @@ -68,8 +68,8 @@
           // footnotes, floats?
       }
   
  -    public LineLayoutManager(List lms, int lh, int l, int f) {
  -        super(null);
  +    public LineLayoutManager(FObj fobjBlock, List lms, int lh, int l, int f) {
  +        super(fobjBlock);
           lmList = lms;
           lineHeight = lh;
           lead = l;
  @@ -165,7 +165,7 @@
           if (currentLine != null) {
               // Adjust spacing as necessary
               adjustSpacing();
  -            verticalAlign();
  +            verticalAlign(currentLine.area);
   
               boolean res = parentLM.addChild(currentLine.area);
   
  @@ -278,9 +278,9 @@
   
       }
   
  -    private void verticalAlign() {
  +    protected void verticalAlign(LineArea lineArea) {
           int maxHeight = lineHeight;
  -        List inlineAreas = currentLine.area.getInlineAreas();
  +        List inlineAreas = lineArea.getInlineAreas();
   
           // get smallest possible offset to before edge
           // this depends on the height of no and middle alignments
  @@ -376,9 +376,9 @@
               }
           }
           if (before + after > maxHeight) {
  -            currentLine.area.setHeight(before + after);
  +            lineArea.setHeight(before + after);
           } else {
  -            currentLine.area.setHeight(maxHeight);
  +            lineArea.setHeight(maxHeight);
           }
       }
   
  @@ -392,7 +392,7 @@
           return currentLine.area;
       }
   
  -    private void createLine() {
  +    protected void createLine() {
           currentLine = new LineInfo();
           currentLine.startPos = curPos;
           currentLine.area = new LineArea();
  
  
  
  1.3       +99 -8     xml-fop/src/org/apache/fop/layoutmgr/SpaceSpecifier.java
  
  Index: SpaceSpecifier.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/org/apache/fop/layoutmgr/SpaceSpecifier.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- SpaceSpecifier.java       8 Jan 2002 09:52:17 -0000       1.2
  +++ SpaceSpecifier.java       28 Apr 2002 21:28:01 -0000      1.3
  @@ -1,5 +1,5 @@
   /*
  - * $Id: SpaceSpecifier.java,v 1.2 2002/01/08 09:52:17 keiron Exp $
  + * $Id: SpaceSpecifier.java,v 1.3 2002/04/28 21:28:01 klease Exp $
    * 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.
  @@ -7,10 +7,9 @@
   
   package org.apache.fop.layoutmgr;
   
  -import org.apache.fop.area.Area;
   import org.apache.fop.area.MinOptMax;
  -import org.apache.fop.datatypes.Space;
  -
  +import org.apache.fop.traits.SpaceVal;
  +import java.util.Vector;
   
   /**
    * Accumulate a sequence of space-specifiers (XSL space type) on
  @@ -19,13 +18,105 @@
    */
   public class SpaceSpecifier {
   
  +
  +    private boolean m_bStartsRefArea;
  +    private boolean m_bHasForcing=false;
  +    private Vector m_vecSpaceVals = new Vector(3);
  +
  +
  +    public SpaceSpecifier(boolean bStartsRefArea) {
  +     m_bStartsRefArea = bStartsRefArea;
  +    }
  +
  +    /**
  +     * Clear all space specifiers and fences.
  +     */
  +    public void clear() {
  +     m_bHasForcing=false;
  +     m_vecSpaceVals.clear();
  +    }
  +
  +    /**
  +     * Add a new space to the sequence. If this sequence starts a reference
  +     * area, and the added space is conditional, and there are no
  +     * non-conditional values in the sequence yet, then ignore it. Otherwise
  +     * add it to the sequence.
  +     */
  +    public void addSpace(SpaceVal moreSpace) {
  +     if (!m_bStartsRefArea || !moreSpace.bConditional ||
  +         !m_vecSpaceVals.isEmpty()) {
  +         if (moreSpace.bForcing) {
  +             if (m_bHasForcing == false) {
  +                 // Remove all other values (must all be non-forcing)
  +                 // Back to the preceding fence
  +                 m_vecSpaceVals.clear();
  +                 m_bHasForcing = true;
  +             }
  +             m_vecSpaceVals.add(moreSpace);
  +         }
  +         else if (m_bHasForcing==false) {
  +             m_vecSpaceVals.add(moreSpace);
  +         }
  +     }
  +    }
  +
       /**
  -     * Combine passed space property value with any existing space.
  +     * Add a "fence" following or preceding any space-specifiers.
  +     * Note that we always add specifiers to the sequence in the
  +     * progression direction, either inline or block. 
        */
  -    public void addSpace(Space moreSpace) {
  +    public void addFence() {
  +     // Fence as first value clears m_bStartsRefArea
  +     // Fence clears m_bHasForcing
       }
   
  -    public MinOptMax resolve() {
  -        return new MinOptMax();
  +    /**
  +     * Resolve the current sequence of space-specifiers, accounting for
  +     * forcing values and "fence" behavior.
  +     * @param bEndsReferenceArea True if the sequence should be resolved
  +     * at the trailing edge of reference area.
  +     * @return The resolved value as a min/opt/max triple.
  +     */
  +    public MinOptMax resolve(boolean bEndsReferenceArea) {
  +     int lastIndex = m_vecSpaceVals.size();
  +     if (bEndsReferenceArea) {
  +         // Start from the end and count conditional specifiers
  +         // Stop at first non-conditional or first fence
  +         for (; lastIndex > 0; --lastIndex) {
  +             SpaceVal sval =
  +                 (SpaceVal)m_vecSpaceVals.elementAt(lastIndex-1);
  +             if (!sval.bConditional) {
  +                 break;
  +             }
  +         }
  +     }
  +     MinOptMax resSpace = new MinOptMax(0);
  +     // Must calculate in sub-sequences delimited by fences!
  +     int iMaxPrec = -1;
  +     for(int index=0; index < lastIndex; index++) {
  +         SpaceVal sval = (SpaceVal)m_vecSpaceVals.elementAt(index);
  +         if (m_bHasForcing) {
  +             resSpace.add(sval.space);
  +         }
  +         else if (sval.iPrecedence > iMaxPrec) {
  +             iMaxPrec = sval.iPrecedence;
  +             resSpace = sval.space;
  +         }
  +         else if (sval.iPrecedence == iMaxPrec)  {
  +             if (sval.space.opt > resSpace.opt) {
  +                 resSpace = sval.space;
  +             }
  +             else if (sval.space.opt == resSpace.opt) {
  +                 if (resSpace.min < sval.space.min) {
  +                     resSpace.min = sval.space.min;
  +                 }
  +                 if (resSpace.max > sval.space.max) {
  +                     resSpace.max = sval.space.max;
  +                 }
  +             }
  +         }
  +         
  +     }
  +     return resSpace;
       }
   }
  
  
  
  1.1                  xml-fop/src/org/apache/fop/traits/BlockProps.java
  
  Index: BlockProps.java
  ===================================================================
  /*
   * $Id: BlockProps.java,v 1.1 2002/04/28 21:28:02 klease Exp $
   * Copyright (C) 2002 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.traits;
  
  import org.apache.fop.datatypes.Length;
  
  /**
   * Store all block-level layout properties on an FO.
   * Public "structure" allows direct member access.
   */
  public class BlockProps {
      public int firstIndent; // text-indent
      public int lastIndent;  // last-line-indent
      public int textAlign;
      public int textAlignLast;
      public int lineStackType; // line-stacking-strategy (enum)
  
      public BlockProps() {}
  
  }
  
  
  
  1.1                  xml-fop/src/org/apache/fop/traits/InlineProps.java
  
  Index: InlineProps.java
  ===================================================================
  /*
   * $Id: InlineProps.java,v 1.1 2002/04/28 21:28:02 klease Exp $
   * 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.traits;
  
  
  /**
   * Store all inline "margin" related properties
   * Public "structure" allows direct member access.
   */
  public class InlineProps {
      public int marginTop;
      public int marginBottom;
      public int marginLeft;
      public int marginRight;
      public SpaceVal spaceStart;
      public SpaceVal spaceEnd;
  
      public InlineProps() {}
  
  }
  
  
  
  1.1                  xml-fop/src/org/apache/fop/traits/LayoutProps.java
  
  Index: LayoutProps.java
  ===================================================================
  /*
   * $Id: LayoutProps.java,v 1.1 2002/04/28 21:28:02 klease Exp $
   * Copyright (C) 2002 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.traits;
  
  import org.apache.fop.datatypes.Length;
  import org.apache.fop.fo.properties.Constants;
  
  /**
   * Store properties affecting layout: break-before, break-after, keeps, span.
   * for a block level FO.
   * Public "structure" allows direct member access.
   */
  public class LayoutProps {
      public int breakBefore;  // enum constant BreakBefore.xxx
      public int breakAfter;   // enum constant BreakAfter.xxx
      public boolean bIsSpan;
      public SpaceVal spaceBefore;
      public SpaceVal spaceAfter;
  
      private static final int[] s_breakPriorities = new int[] {
        Constants.AUTO, Constants.COLUMN, Constants.PAGE };
  
  
      public LayoutProps() {
        breakBefore = breakAfter = Constants.AUTO;
        bIsSpan = false;
      }
  
  //     public static int higherBreak(int brkParent, int brkChild) {
  //    if (brkParent == brkChild) return brkChild;
  //    for (int i=0; i < s_breakPriorities.length; i++) {
  //        int bp = s_breakPriorities[i];
  //        if (bp == brkParent) return brkChild;
  //        else if (bp == brkChild) return brkParent;
  //    }
  //    return brkChild;
  //     }
  
      public void combineWithParent(LayoutProps parentLP) {
        if (parentLP.breakBefore != breakBefore) {
            for (int i=0; i < s_breakPriorities.length; i++) {
                int bp = s_breakPriorities[i];
                if (bp == breakBefore) {
                    breakBefore = parentLP.breakBefore;
                    break;
                }
                else if (bp == parentLP.breakBefore) break;
            }
        }
        // Parent span always overrides child span
        bIsSpan = parentLP.bIsSpan;
      }
  }
  
  
  
  1.1                  xml-fop/src/org/apache/fop/traits/SpaceVal.java
  
  Index: SpaceVal.java
  ===================================================================
  /*
   * $Id: SpaceVal.java,v 1.1 2002/04/28 21:28:02 klease Exp $
   * 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.traits;
  
  import org.apache.fop.datatypes.Space;
  import org.apache.fop.area.MinOptMax;
  import org.apache.fop.fo.Property;
  import org.apache.fop.fo.properties.Constants;
  
  /**
   * Store a single Space property value in simplified form, with all
   * Length values resolved.
   */
  public class SpaceVal {
      public final MinOptMax space;
      public final boolean bConditional;
      public final boolean bForcing;
      public final int iPrecedence; //  Numeric only, if forcing, set to 0
  
      public SpaceVal(Space spaceprop) {
        space = new MinOptMax(
                              spaceprop.getMinimum().getLength().mvalue(),
                              spaceprop.getOptimum().getLength().mvalue(),
                              spaceprop.getMaximum().getLength().mvalue());
        bConditional = (spaceprop.getConditionality().getEnum() ==
                        Constants.DISCARD);
        Property precProp = spaceprop.getPrecedence();
        if (precProp.getNumber() != null) {
            iPrecedence = precProp.getNumber().intValue();
            bForcing = false;
        }
        else {
            bForcing = (precProp.getEnum() == Constants.FORCE);
            iPrecedence=0;
        }
      }
  
      public SpaceVal(MinOptMax space, boolean bConditional, boolean bForcing,
                    int iPrecedence) {
        this.space = space;
        this.bConditional = bConditional;
        this.bForcing = bForcing;
        this.iPrecedence = iPrecedence;
      }
  
  }
  
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to