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]