aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKeiron Liddle <keiron@apache.org>2001-02-07 02:02:38 +0000
committerKeiron Liddle <keiron@apache.org>2001-02-07 02:02:38 +0000
commit2b44ece3c070ce08446d6cd69b0e87cc64548ec8 (patch)
tree56cc862bd4a0813cc56d0828c159c41fc37e71b2 /src
parent49e041ab08ae3acf27e97a5ccc0af6b1ccedd53c (diff)
downloadxmlgraphics-fop-2b44ece3c070ce08446d6cd69b0e87cc64548ec8.tar.gz
xmlgraphics-fop-2b44ece3c070ce08446d6cd69b0e87cc64548ec8.zip
added some comments
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@194029 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/org/apache/fop/layout/BlockArea.java358
1 files changed, 194 insertions, 164 deletions
diff --git a/src/org/apache/fop/layout/BlockArea.java b/src/org/apache/fop/layout/BlockArea.java
index fe45160d9..94ee4bc50 100644
--- a/src/org/apache/fop/layout/BlockArea.java
+++ b/src/org/apache/fop/layout/BlockArea.java
@@ -74,176 +74,206 @@ import org.apache.fop.messaging.MessageHandler;
*/
public class BlockArea extends Area {
- /* relative to area container */
- protected int startIndent;
- protected int endIndent;
-
- /* first line startIndent modifier */
- protected int textIndent;
-
- protected int lineHeight;
-
- protected int halfLeading;
-
-
- /* text-align of all but the last line */
- protected int align;
-
- /* text-align of the last line */
- protected int alignLastLine;
-
- protected LineArea currentLineArea;
- protected LinkSet currentLinkSet;
-
- /* have any line areas been used? */
- protected boolean hasLines = false;
-
- /*hyphenation*/
- protected int hyphenate;
- protected char hyphenationChar;
- protected int hyphenationPushCharacterCount;
- protected int hyphenationRemainCharacterCount;
- protected String language;
- protected String country;
-
- protected Vector pendingFootnotes = null;
-
- public BlockArea(FontState fontState, int allocationWidth,
- int maxHeight, int startIndent, int endIndent,
- int textIndent, int align, int alignLastLine, int lineHeight) {
- super(fontState, allocationWidth, maxHeight);
-
- this.startIndent = startIndent;
- this.endIndent = endIndent;
- this.textIndent = textIndent;
- this.contentRectangleWidth =
- allocationWidth - startIndent - endIndent;
- this.align = align;
- this.alignLastLine = alignLastLine;
- this.lineHeight = lineHeight;
-
- if (fontState != null)
- this.halfLeading = (lineHeight - fontState.getFontSize()) / 2;
- }
-
- public void render(Renderer renderer) {
- renderer.renderBlockArea(this);
- }
-
- public void addLineArea(LineArea la) {
- if (!la.isEmpty()) {
- la.verticalAlign();
- this.addDisplaySpace(this.halfLeading);
- int size = la.getHeight();
- this.addChild(la);
- this.increaseHeight(size);
- this.addDisplaySpace(this.halfLeading);
- }
- // add pending footnotes
- if(pendingFootnotes != null) {
- for(Enumeration e = pendingFootnotes.elements(); e.hasMoreElements(); ) {
- FootnoteBody fb = (FootnoteBody)e.nextElement();
- Page page = getPage();
- if(!Footnote.layoutFootnote(page, fb, this)) {
- page.addPendingFootnote(fb);
- }
- }
- pendingFootnotes = null;
- }
- }
-
- public LineArea getCurrentLineArea()
- {
- if (currentHeight + this.currentLineArea.getHeight() > maxHeight) {
- return null;
- }
- this.currentLineArea.changeHyphenation(language, country, hyphenate,
- hyphenationChar, hyphenationPushCharacterCount,
- hyphenationRemainCharacterCount);
- this.hasLines = true;
+ /* relative to area container */
+ protected int startIndent;
+ protected int endIndent;
+
+ /* first line startIndent modifier */
+ protected int textIndent;
+
+ protected int lineHeight;
+
+ protected int halfLeading;
+
+
+ /* text-align of all but the last line */
+ protected int align;
+
+ /* text-align of the last line */
+ protected int alignLastLine;
+
+ protected LineArea currentLineArea;
+ protected LinkSet currentLinkSet;
+
+ /* have any line areas been used? */
+ protected boolean hasLines = false;
+
+ /*hyphenation*/
+ protected int hyphenate;
+ protected char hyphenationChar;
+ protected int hyphenationPushCharacterCount;
+ protected int hyphenationRemainCharacterCount;
+ protected String language;
+ protected String country;
+
+ protected Vector pendingFootnotes = null;
+
+ public BlockArea(FontState fontState, int allocationWidth,
+ int maxHeight, int startIndent, int endIndent,
+ int textIndent, int align, int alignLastLine, int lineHeight) {
+ super(fontState, allocationWidth, maxHeight);
+
+ this.startIndent = startIndent;
+ this.endIndent = endIndent;
+ this.textIndent = textIndent;
+ this.contentRectangleWidth =
+ allocationWidth - startIndent - endIndent;
+ this.align = align;
+ this.alignLastLine = alignLastLine;
+ this.lineHeight = lineHeight;
+
+ if (fontState != null)
+ this.halfLeading = (lineHeight - fontState.getFontSize()) / 2;
+ }
+
+ public void render(Renderer renderer) {
+ renderer.renderBlockArea(this);
+ }
+
+ /**
+ * Add a Line Area to this block area.
+ * Used internally to add a completed line area to this block area
+ * when either a new line area is created or this block area is
+ * completed.
+ *
+ * @param la the LineArea to add
+ */
+ protected void addLineArea(LineArea la) {
+ if (!la.isEmpty()) {
+ la.verticalAlign();
+ this.addDisplaySpace(this.halfLeading);
+ int size = la.getHeight();
+ this.addChild(la);
+ this.increaseHeight(size);
+ this.addDisplaySpace(this.halfLeading);
+ }
+ // add pending footnotes
+ if (pendingFootnotes != null) {
+ for (Enumeration e = pendingFootnotes.elements();
+ e.hasMoreElements();) {
+ FootnoteBody fb = (FootnoteBody) e.nextElement();
+ Page page = getPage();
+ if (!Footnote.layoutFootnote(page, fb, this)) {
+ page.addPendingFootnote(fb);
+ }
+ }
+ pendingFootnotes = null;
+ }
+ }
+
+ /**
+ * Get the current line area in this block area.
+ * This is used to get the current line area for adding
+ * inline objects to.
+ * This will return null if there is not enough room left
+ * in the block area to accomodate the line area.
+ *
+ * @return the line area to be used to add inlie objects
+ */
+ public LineArea getCurrentLineArea() {
+ if (currentHeight + this.currentLineArea.getHeight() > maxHeight) {
+ return null;
+ }
+ this.currentLineArea.changeHyphenation(language, country,
+ hyphenate, hyphenationChar, hyphenationPushCharacterCount,
+ hyphenationRemainCharacterCount);
+ this.hasLines = true;
return this.currentLineArea;
}
- public LineArea createNextLineArea()
- {
- if (this.hasLines) {
-// this.currentLineArea.addPending();
- this.currentLineArea.align(this.align);
- this.addLineArea(this.currentLineArea);
- }
- this.currentLineArea =
- new LineArea(fontState, lineHeight, halfLeading,
- allocationWidth, startIndent, endIndent,
- currentLineArea);
- this.currentLineArea.changeHyphenation(language, country, hyphenate,
- hyphenationChar, hyphenationPushCharacterCount,
- hyphenationRemainCharacterCount);
- if (currentHeight + lineHeight > maxHeight) {
- return null;
- }
+ /**
+ * Create a new line area to add inline objects.
+ * This should be called after getting the current line area
+ * and discovering that the inline object will not fit inside the current
+ * line. This method will create a new line area to place the inline
+ * object into.
+ * This will return null if the new line cannot fit into the block area.
+ *
+ * @return the new current line area, which will be empty.
+ */
+ public LineArea createNextLineArea() {
+ if (this.hasLines) {
+ this.currentLineArea.align(this.align);
+ this.addLineArea(this.currentLineArea);
+ }
+ this.currentLineArea =
+ new LineArea(fontState, lineHeight, halfLeading,
+ allocationWidth, startIndent, endIndent, currentLineArea);
+ this.currentLineArea.changeHyphenation(language, country,
+ hyphenate, hyphenationChar, hyphenationPushCharacterCount,
+ hyphenationRemainCharacterCount);
+ if (currentHeight + lineHeight > maxHeight) {
+ return null;
+ }
return this.currentLineArea;
}
- public void setupLinkSet(LinkSet ls)
- {
- if (ls != null) {
- this.currentLinkSet = ls;
- ls.setYOffset(currentHeight);
- }
+ public void setupLinkSet(LinkSet ls) {
+ if (ls != null) {
+ this.currentLinkSet = ls;
+ ls.setYOffset(currentHeight);
+ }
+ }
+
+ /**
+ * Notify this block that the area has completed layout.
+ * Indicates the the block has been fully laid out, this will
+ * add (if any) the current line area.
+ */
+ public void end() {
+ if (this.hasLines) {
+ this.currentLineArea.addPending();
+ this.currentLineArea.align(this.alignLastLine);
+ this.addLineArea(this.currentLineArea);
+ }
+ }
+
+ public void start() {
+ currentLineArea = new LineArea(fontState, lineHeight, halfLeading,
+ allocationWidth, startIndent + textIndent, endIndent, null);
+ }
+
+ public int getEndIndent() {
+ return endIndent;
+ }
+
+ // KL: I think we should just return startIndent here!
+ public int getStartIndent() {
+ return startIndent + paddingLeft + borderWidthLeft;
}
- public void end() {
- if (this.hasLines) {
- this.currentLineArea.addPending();
- this.currentLineArea.align(this.alignLastLine);
- this.addLineArea(this.currentLineArea);
- }
- }
-
- public void start() {
- currentLineArea = new LineArea(fontState, lineHeight, halfLeading,
- allocationWidth, startIndent + textIndent, endIndent, null);
- }
-
- public int getEndIndent() {
- return endIndent;
- }
-
-// KL: I think we should just return startIndent here!
- public int getStartIndent() {
- return startIndent + paddingLeft + borderWidthLeft;
- }
-
- public void setIndents(int startIndent, int endIndent) {
- this.startIndent = startIndent;
- this.endIndent = endIndent;
- this.contentRectangleWidth =
- allocationWidth - startIndent - endIndent;
- }
-
- public int spaceLeft() {
- return maxHeight - currentHeight;
- }
-
- public int getHalfLeading() {
- return halfLeading;
- }
-
- public void setHyphenation(String language, String country, int hyphenate, char hyphenationChar,
- int hyphenationPushCharacterCount,
- int hyphenationRemainCharacterCount) {
- this.language = language;
- this.country = country;
- this.hyphenate = hyphenate;
- this.hyphenationChar = hyphenationChar;
- this.hyphenationPushCharacterCount = hyphenationPushCharacterCount;
- this.hyphenationRemainCharacterCount = hyphenationRemainCharacterCount;
- }
-
- public void addFootnote(FootnoteBody fb) {
- if(pendingFootnotes == null) {
- pendingFootnotes = new Vector();
- }
- pendingFootnotes.addElement(fb);
- }
+ public void setIndents(int startIndent, int endIndent) {
+ this.startIndent = startIndent;
+ this.endIndent = endIndent;
+ this.contentRectangleWidth =
+ allocationWidth - startIndent - endIndent;
+ }
+
+ public int spaceLeft() {
+ return maxHeight - currentHeight;
+ }
+
+ public int getHalfLeading() {
+ return halfLeading;
+ }
+
+ public void setHyphenation(String language, String country,
+ int hyphenate, char hyphenationChar,
+ int hyphenationPushCharacterCount,
+ int hyphenationRemainCharacterCount) {
+ this.language = language;
+ this.country = country;
+ this.hyphenate = hyphenate;
+ this.hyphenationChar = hyphenationChar;
+ this.hyphenationPushCharacterCount = hyphenationPushCharacterCount;
+ this.hyphenationRemainCharacterCount =
+ hyphenationRemainCharacterCount;
+ }
+
+ public void addFootnote(FootnoteBody fb) {
+ if (pendingFootnotes == null) {
+ pendingFootnotes = new Vector();
+ }
+ pendingFootnotes.addElement(fb);
+ }
}