aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache
diff options
context:
space:
mode:
authorAdrian Cumiskey <acumiskey@apache.org>2008-05-06 09:14:47 +0000
committerAdrian Cumiskey <acumiskey@apache.org>2008-05-06 09:14:47 +0000
commite413e9c8a102146703e2f47291f5894476edc48b (patch)
tree1fffea5e760640b3fec268be2446e4791bebf50a /src/java/org/apache
parent57f554c453e44d309ddba9ac748772c13b24cf38 (diff)
downloadxmlgraphics-fop-e413e9c8a102146703e2f47291f5894476edc48b.tar.gz
xmlgraphics-fop-e413e9c8a102146703e2f47291f5894476edc48b.zip
Merged revisions 652821-652822,652835,653036,653045,653048,653106,653144,653202,653204,653311,653564 via svnmerge from
https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk ........ r652821 | adelmelle | 2008-05-02 17:58:26 +0100 (Fri, 02 May 2008) | 6 lines Cleanup/Correction after r657673 -> added missing file FObj.java -> pushed retrieve-class-name upwards to AbstractRetrieveMarker as a common property -> corrected use of property-name "retrieve-class-name" in source and testcase -> improved consistency in code-style ........ r652822 | adelmelle | 2008-05-02 18:00:33 +0100 (Fri, 02 May 2008) | 1 line Expand imports... ........ r652835 | adelmelle | 2008-05-02 18:28:25 +0100 (Fri, 02 May 2008) | 3 lines Bugzilla 42703: Fixed a regression introduced by the fix for Bugzilla 44286 ........ r653036 | adelmelle | 2008-05-03 11:21:45 +0100 (Sat, 03 May 2008) | 2 lines Cleanup: improve code-readibility ........ r653045 | adelmelle | 2008-05-03 11:51:16 +0100 (Sat, 03 May 2008) | 2 lines Tweak/correction: save local hash-code (as originally intended...) ........ r653048 | adelmelle | 2008-05-03 11:55:07 +0100 (Sat, 03 May 2008) | 2 lines Tweaks: make fobj member final; have default implementations for some methods throw an UnsupportedOperationException instead of merely logging an error ........ r653106 | acumiskey | 2008-05-03 20:07:18 +0100 (Sat, 03 May 2008) | 1 line Fixed the build. Assignment on final variable fobj. ........ r653144 | acumiskey | 2008-05-03 22:29:09 +0100 (Sat, 03 May 2008) | 1 line Fix that preserves the final status of the fobj member variable. ........ r653202 | adelmelle | 2008-05-04 12:37:31 +0100 (Sun, 04 May 2008) | 2 lines Change private element-generating methods to add the elements to a passed List (improves code-readability and reduces the amount of temporary LinkedList instances) ........ r653204 | adelmelle | 2008-05-04 14:04:28 +0100 (Sun, 04 May 2008) | 4 lines Further refinements: -> use cached auxiliary position where possible (analogous to BlockStackingLM) -> consolidate makeXXXPenalty() helpers ........ r653311 | jeremias | 2008-05-05 07:50:54 +0100 (Mon, 05 May 2008) | 6 lines Bugzilla #43650: PCL Renderer: Improved page format selection so it doesn't interfere with duplex printing. Submitted by: Thomas Margreiter <tm.at.felder.at> Note: I've only been able to verify that the change doesn't have any negative effects on simplex printers. ........ r653564 | adelmelle | 2008-05-05 20:27:10 +0100 (Mon, 05 May 2008) | 2 lines Correction of indentation ........ git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_AFPGOCAResources@653718 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache')
-rw-r--r--src/java/org/apache/fop/fo/FObj.java49
-rw-r--r--src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java5
-rw-r--r--src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java29
-rw-r--r--src/java/org/apache/fop/fo/flow/RetrieveMarker.java53
-rw-r--r--src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java18
-rw-r--r--src/java/org/apache/fop/fo/properties/CommonHyphenation.java5
-rw-r--r--src/java/org/apache/fop/layoutmgr/AbstractBaseLayoutManager.java53
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java1015
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java1
-rw-r--r--src/java/org/apache/fop/render/pcl/PCLRenderer.java54
10 files changed, 572 insertions, 710 deletions
diff --git a/src/java/org/apache/fop/fo/FObj.java b/src/java/org/apache/fop/fo/FObj.java
index a2b09640b..79b04c4d7 100644
--- a/src/java/org/apache/fop/fo/FObj.java
+++ b/src/java/org/apache/fop/fo/FObj.java
@@ -427,12 +427,12 @@ public abstract class FObj extends FONode implements Constants {
*/
protected boolean isBlockItem(String nsURI, String lName) {
return (FO_URI.equals(nsURI)
- && (lName.equals("block")
- || lName.equals("table")
- || lName.equals("table-and-caption")
- || lName.equals("block-container")
- || lName.equals("list-block")
- || lName.equals("float")
+ && ("block".equals(lName)
+ || "table".equals(lName)
+ || "table-and-caption".equals(lName)
+ || "block-container".equals(lName)
+ || "list-block".equals(lName)
+ || "float".equals(lName)
|| isNeutralItem(nsURI, lName)));
}
@@ -446,21 +446,21 @@ public abstract class FObj extends FONode implements Constants {
*/
protected boolean isInlineItem(String nsURI, String lName) {
return (FO_URI.equals(nsURI)
- && (lName.equals("bidi-override")
- || lName.equals("character")
- || lName.equals("external-graphic")
- || lName.equals("instream-foreign-object")
- || lName.equals("inline")
- || lName.equals("inline-container")
- || lName.equals("leader")
- || lName.equals("page-number")
- || lName.equals("page-number-citation")
- || lName.equals("page-number-citation-last")
- || lName.equals("basic-link")
- || (lName.equals("multi-toggle")
+ && ("bidi-override".equals(lName)
+ || "character".equals(lName)
+ || "external-graphic".equals(lName)
+ || "instream-foreign-object".equals(lName)
+ || "inline".equals(lName)
+ || "inline-container".equals(lName)
+ || "leader".equals(lName)
+ || "page-number".equals(lName)
+ || "page-number-citation".equals(lName)
+ || "page-number-citation-last".equals(lName)
+ || "basic-link".equals(lName)
+ || ("multi-toggle".equals(lName)
&& (getNameId() == FO_MULTI_CASE
|| findAncestor(FO_MULTI_CASE) > 0))
- || (lName.equals("footnote")
+ || ("footnote".equals(lName)
&& !isOutOfLineFODescendant)
|| isNeutralItem(nsURI, lName)));
}
@@ -487,11 +487,12 @@ public abstract class FObj extends FONode implements Constants {
*/
boolean isNeutralItem(String nsURI, String lName) {
return (FO_URI.equals(nsURI)
- && (lName.equals("multi-switch")
- || lName.equals("multi-properties")
- || lName.equals("wrapper")
- || (!isOutOfLineFODescendant && lName.equals("float"))
- || lName.equals("retrieve-marker")));
+ && ("multi-switch".equals(lName)
+ || "multi-properties".equals(lName)
+ || "wrapper".equals(lName)
+ || (!isOutOfLineFODescendant && "float".equals(lName))
+ || "retrieve-marker".equals(lName)
+ || "retrieve-table-marker".equals(lName)));
}
/**
diff --git a/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java b/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
index bfebf6233..557a1778e 100644
--- a/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
+++ b/src/java/org/apache/fop/fo/XMLWhiteSpaceHandler.java
@@ -116,6 +116,7 @@ public class XMLWhiteSpaceHandler {
if (ancestor.getNameId() == Constants.FO_BLOCK) {
currentBlock = (Block) ancestor;
+ nestedBlockStack.push(currentBlock);
}
} else if (!nestedBlockStack.isEmpty()) {
currentBlock = (Block) nestedBlockStack.peek();
@@ -206,9 +207,7 @@ public class XMLWhiteSpaceHandler {
/* end of block: clear the references and pop the
* nested block stack */
if (!nestedBlockStack.empty()) {
- currentBlock = (Block) nestedBlockStack.pop();
- } else {
- currentBlock = null;
+ nestedBlockStack.pop();
}
charIter = null;
}
diff --git a/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java b/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
index 334f98e2f..83a0ddbdc 100644
--- a/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
+++ b/src/java/org/apache/fop/fo/flow/AbstractRetrieveMarker.java
@@ -23,9 +23,11 @@ import org.apache.fop.fo.FOText;
import org.apache.fop.fo.FObj;
import org.apache.fop.fo.FObjMixed;
import org.apache.fop.fo.PropertyList;
+import org.apache.fop.fo.ValidationException;
import org.apache.fop.fo.flow.table.TableFObj;
import org.apache.fop.fo.flow.table.Table;
import org.apache.fop.apps.FOPException;
+import org.xml.sax.Locator;
import java.util.Iterator;
@@ -40,6 +42,8 @@ public abstract class AbstractRetrieveMarker extends FObjMixed {
private PropertyList propertyList;
+ private String retrieveClassName;
+
/**
* Create a new AbstractRetrieveMarker instance that
* is a child of the given {@link FONode}
@@ -52,11 +56,26 @@ public abstract class AbstractRetrieveMarker extends FObjMixed {
/**
* {@inheritDoc}
+ * <p>XSL Content Model: empty
+ */
+ protected void validateChildNode(Locator loc, String nsURI, String localName)
+ throws ValidationException {
+ if (FO_URI.equals(nsURI)) {
+ invalidChildError(loc, nsURI, localName);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
* Store a reference to the parent {@link PropertyList}
* to be used when the retrieve-marker is resolved.
*/
public void bind(PropertyList pList) throws FOPException {
super.bind(pList);
+ this.retrieveClassName = pList.get(PR_RETRIEVE_CLASS_NAME).getString();
+ if (retrieveClassName == null || retrieveClassName.equals("")) {
+ missingPropertyError("retrieve-class-name");
+ }
this.propertyList = pList.getParentPropertyList();
}
@@ -169,4 +188,14 @@ public abstract class AbstractRetrieveMarker extends FObjMixed {
}
}
+ /**
+ * Return the value for the <code>retrieve-class-name</code>
+ * property
+ *
+ * @return the value for retrieve-class-name
+ */
+ public String getRetrieveClassName() {
+ return this.retrieveClassName;
+ }
+
}
diff --git a/src/java/org/apache/fop/fo/flow/RetrieveMarker.java b/src/java/org/apache/fop/fo/flow/RetrieveMarker.java
index b75e14664..c696d3d14 100644
--- a/src/java/org/apache/fop/fo/flow/RetrieveMarker.java
+++ b/src/java/org/apache/fop/fo/flow/RetrieveMarker.java
@@ -19,12 +19,9 @@
package org.apache.fop.fo.flow;
-import java.util.Iterator;
-
import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.PropertyList;
-import org.apache.fop.fo.ValidationException;
import org.xml.sax.Locator;
import org.xml.sax.Attributes;
@@ -37,7 +34,6 @@ import org.xml.sax.Attributes;
public class RetrieveMarker extends AbstractRetrieveMarker {
// The value of properties relevant for fo:retrieve-marker.
- private String retrieveClassName;
private int retrievePosition;
private int retrieveBoundary;
// End of property values
@@ -46,7 +42,7 @@ public class RetrieveMarker extends AbstractRetrieveMarker {
* Create a new RetrieveMarker instance that is a
* child of the given {@link FONode}.
*
- * @param parent {@link FONode} that is the parent of this object
+ * @param parent the parent {@link FONode}
*/
public RetrieveMarker(FONode parent) {
super(parent);
@@ -72,47 +68,34 @@ public class RetrieveMarker extends AbstractRetrieveMarker {
/** {@inheritDoc} */
public void bind(PropertyList pList) throws FOPException {
-
- retrieveClassName = pList.get(PR_RETRIEVE_CLASS_NAME).getString();
- retrievePosition = pList.get(PR_RETRIEVE_POSITION).getEnum();
- retrieveBoundary = pList.get(PR_RETRIEVE_BOUNDARY).getEnum();
-
- if (retrieveClassName == null || retrieveClassName.equals("")) {
- missingPropertyError("retrieve-class-name");
- }
super.bind(pList);
+ this.retrievePosition = pList.get(PR_RETRIEVE_POSITION).getEnum();
+ this.retrieveBoundary = pList.get(PR_RETRIEVE_BOUNDARY).getEnum();
}
/**
- * {@inheritDoc}
- * XSL Content Model: empty
- */
- protected void validateChildNode(Locator loc, String nsURI, String localName)
- throws ValidationException {
- if (FO_URI.equals(nsURI)) {
- invalidChildError(loc, nsURI, localName);
- }
- }
-
- /**
- * @return the "retrieve-class-name" property.
- */
- public String getRetrieveClassName() {
- return retrieveClassName;
- }
-
- /**
- * @return the "retrieve-position" property (enum value).
+ * Return the value for the <code>retrieve-position</code>
+ * property
+ * @return the value for retrieve-position-within-table; one of
+ * {@link org.apache.fop.fo.Constants#EN_FSWP},
+ * {@link org.apache.fop.fo.Constants#EN_FIC},
+ * {@link org.apache.fop.fo.Constants#EN_LSWP},
+ * {@link org.apache.fop.fo.Constants#EN_LEWP}.
*/
public int getRetrievePosition() {
- return retrievePosition;
+ return this.retrievePosition;
}
/**
- * @return the "retrieve-boundary" property (enum value).
+ * Return the value for the <code>retrieve-boundary</code>
+ * property
+ * @return the value for retrieve-boundary-within-table; one of
+ * {@link org.apache.fop.fo.Constants#EN_PAGE},
+ * {@link org.apache.fop.fo.Constants#EN_PAGE_SEQUENCE},
+ * {@link org.apache.fop.fo.Constants#EN_DOCUMENT}.
*/
public int getRetrieveBoundary() {
- return retrieveBoundary;
+ return this.retrieveBoundary;
}
/** {@inheritDoc} */
diff --git a/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java b/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java
index 4a7b8af0d..9d04e308d 100644
--- a/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java
+++ b/src/java/org/apache/fop/fo/flow/RetrieveTableMarker.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-/* $Id:$ */
+/* $Id$ */
package org.apache.fop.fo.flow;
import org.apache.fop.fo.FONode;
@@ -30,8 +30,7 @@ import org.xml.sax.Attributes;
*/
public class RetrieveTableMarker extends AbstractRetrieveMarker {
- // The value of properties relevant for fo:retrieve-marker.
- private String retrieveClassName;
+ // The value of properties relevant for fo:retrieve-table-marker.
private int retrievePositionWithinTable;
private int retrieveBoundaryWithinTable;
// end property values
@@ -46,7 +45,11 @@ public class RetrieveTableMarker extends AbstractRetrieveMarker {
super(parent);
}
- /** {@inheritDoc} */
+ /**
+ * {@inheritDoc}
+ * <i>NOTE: An <code>fo:retrieve-table-marker</code> is only permitted as a descendant
+ * of an <code>fo:table-header</code> or an <code>fo:table-footer</code>.</i>
+ */
public void processNode(String elementName, Locator locator, Attributes attlist, PropertyList pList) throws FOPException {
if (findAncestor(FO_TABLE_HEADER) < 0
&& findAncestor(FO_TABLE_FOOTER) < 0) {
@@ -59,18 +62,13 @@ public class RetrieveTableMarker extends AbstractRetrieveMarker {
/** {@inheritDoc} */
public void bind(PropertyList pList) throws FOPException {
- this.retrieveClassName = pList.get(PR_RETRIEVE_CLASS_NAME).getString();
+ super.bind(pList);
this.retrievePositionWithinTable
= pList.get(PR_RETRIEVE_POSITION_WITHIN_TABLE).getEnum();
this.retrieveBoundaryWithinTable
= pList.get(PR_RETRIEVE_BOUNDARY_WITHIN_TABLE).getEnum();
}
- /** {@inheritDoc} */
- public String getRetrieveClassName() {
- return this.retrieveClassName;
- }
-
/**
* Return the value for the <code>retrieve-position-within-table</code>
* property
diff --git a/src/java/org/apache/fop/fo/properties/CommonHyphenation.java b/src/java/org/apache/fop/fo/properties/CommonHyphenation.java
index f47ddbe0c..dfafa3b16 100644
--- a/src/java/org/apache/fop/fo/properties/CommonHyphenation.java
+++ b/src/java/org/apache/fop/fo/properties/CommonHyphenation.java
@@ -203,7 +203,7 @@ public final class CommonHyphenation {
/** {@inheritDoc} */
public int hashCode() {
- if (hash == 0) {
+ if (this.hash == 0) {
int hash = 17;
hash = 37 * hash + (language == null ? 0 : language.hashCode());
hash = 37 * hash + (script == null ? 0 : script.hashCode());
@@ -215,8 +215,9 @@ public final class CommonHyphenation {
(hyphenationPushCharacterCount == null ? 0 : hyphenationPushCharacterCount.hashCode());
hash = 37 * hash +
(hyphenationRemainCharacterCount == null ? 0 : hyphenationRemainCharacterCount.hashCode());
+ this.hash = hash;
}
- return hash;
+ return this.hash;
}
}
diff --git a/src/java/org/apache/fop/layoutmgr/AbstractBaseLayoutManager.java b/src/java/org/apache/fop/layoutmgr/AbstractBaseLayoutManager.java
index c5e0ddfc9..7fd289c05 100644
--- a/src/java/org/apache/fop/layoutmgr/AbstractBaseLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/AbstractBaseLayoutManager.java
@@ -29,7 +29,7 @@ import org.apache.fop.fo.FObj;
* The base class for nearly all LayoutManagers.
* Provides the functionality for merging the {@link LayoutManager}
* and the {@link org.apache.fop.datatypes.PercentBaseContext} interfaces
- * into a common base calls for all higher LayoutManagers.
+ * into a common base class for all higher LayoutManagers.
*/
public abstract class AbstractBaseLayoutManager
implements LayoutManager, PercentBaseContext {
@@ -39,7 +39,7 @@ public abstract class AbstractBaseLayoutManager
/** Indicator if this LM generates block areas */
protected boolean generatesBlockArea = false;
/** The formatting object for this LM */
- protected FObj fobj = null;
+ protected final FObj fobj;
/**
* logging instance
@@ -50,6 +50,7 @@ public abstract class AbstractBaseLayoutManager
* Abstract base layout manager.
*/
public AbstractBaseLayoutManager() {
+ fobj = null;
}
/**
@@ -58,7 +59,7 @@ public abstract class AbstractBaseLayoutManager
* @param fo the formatting object for this layout manager
*/
public AbstractBaseLayoutManager(FObj fo) {
- fobj = fo;
+ this.fobj = fo;
setGeneratesReferenceArea(fo.generatesReferenceAreas());
if (getGeneratesReferenceArea()) {
setGeneratesBlockArea(true);
@@ -67,9 +68,7 @@ public abstract class AbstractBaseLayoutManager
// --------- Property Resolution related functions --------- //
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public int getBaseLength(int lengthBase, FObj fobj) {
if (fobj == this.fobj) {
switch (lengthBase) {
@@ -82,7 +81,7 @@ public abstract class AbstractBaseLayoutManager
case LengthBase.CONTAINING_REFAREA_WIDTH:
return getReferenceAreaIPD();
default:
- log.error(new Exception("Unknown base type for LengthBase:" + lengthBase));
+ log.error("Unknown base type for LengthBase:" + lengthBase);
return 0;
}
} else {
@@ -112,9 +111,7 @@ public abstract class AbstractBaseLayoutManager
}
lm = lm.getParent();
}
- if (lm == null) {
- log.error("No parent LM found");
- }
+ log.error("No parent LM found");
return 0;
}
@@ -131,9 +128,7 @@ public abstract class AbstractBaseLayoutManager
}
lm = lm.getParent();
}
- if (lm == null) {
- log.error("No parent LM found");
- }
+ log.error("No parent LM found");
return 0;
}
@@ -176,9 +171,7 @@ public abstract class AbstractBaseLayoutManager
}
lm = lm.getParent();
}
- if (lm == null) {
- log.error("No parent LM found");
- }
+ log.error("No parent LM found");
return 0;
}
@@ -195,31 +188,31 @@ public abstract class AbstractBaseLayoutManager
}
lm = lm.getParent();
}
- if (lm == null) {
- log.error("No parent LM found");
- }
+ log.error("No parent LM found");
return 0;
}
/**
* {@inheritDoc}
+ * <i>NOTE: Should be overridden by subclasses.
+ * Default implementation throws an <code>UnsupportedOperationException</code>.</i>
*/
public int getContentAreaIPD() {
- log.error("getContentAreaIPD called when it should have been overwritten");
- return 0;
+ throw new UnsupportedOperationException(
+ "getContentAreaIPD() called when it should have been overridden");
}
/**
* {@inheritDoc}
+ * <i>NOTE: Should be overridden by subclasses.
+ * Default implementation throws an <code>UnsupportedOperationException</code>.</i>
*/
public int getContentAreaBPD() {
- log.error("getContentAreaBPD called when it should have been overwritten");
- return 0;
+ throw new UnsupportedOperationException(
+ "getContentAreaBPD() called when it should have been overridden");
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean getGeneratesReferenceArea() {
return generatesReferenceArea;
}
@@ -234,9 +227,7 @@ public abstract class AbstractBaseLayoutManager
this.generatesReferenceArea = generatesReferenceArea;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean getGeneratesBlockArea() {
return generatesBlockArea;
}
@@ -250,9 +241,7 @@ public abstract class AbstractBaseLayoutManager
this.generatesBlockArea = generatesBlockArea;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean getGeneratesLineArea() {
return false;
}
diff --git a/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
index 40e1c087a..be8a13d50 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
@@ -62,33 +62,40 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
* Number of word-spaces?
*/
private class AreaInfo {
- private short iStartIndex;
- private short iBreakIndex;
- private short iWScount;
- private short iLScount;
- private MinOptMax ipdArea;
- private boolean bHyphenated;
+ private short startIndex;
+ private short breakIndex;
+ private short wordSpaceCount;
+ private short letterSpaceCount;
+ private MinOptMax areaIPD;
+ private boolean isHyphenated;
private boolean isSpace;
private boolean breakOppAfter;
- public AreaInfo(short iSIndex, short iBIndex, short iWS, short iLS,
- MinOptMax ipd, boolean bHyph, boolean isSpace, boolean breakOppAfter) {
- iStartIndex = iSIndex;
- iBreakIndex = iBIndex;
- iWScount = iWS;
- iLScount = iLS;
- ipdArea = ipd;
- bHyphenated = bHyph;
+
+ AreaInfo(short startIndex,
+ short breakIndex,
+ short wordSpaceCount,
+ short letterSpaceCount,
+ MinOptMax areaIPD,
+ boolean isHyphenated,
+ boolean isSpace,
+ boolean breakOppAfter) {
+ this.startIndex = startIndex;
+ this.breakIndex = breakIndex;
+ this.wordSpaceCount = wordSpaceCount;
+ this.letterSpaceCount = letterSpaceCount;
+ this.areaIPD = areaIPD;
+ this.isHyphenated = isHyphenated;
this.isSpace = isSpace;
this.breakOppAfter = breakOppAfter;
}
-
+
public String toString() {
- return "[ lscnt=" + iLScount
- + ", wscnt=" + iWScount
- + ", ipd=" + ipdArea.toString()
- + ", sidx=" + iStartIndex
- + ", bidx=" + iBreakIndex
- + ", hyph=" + bHyphenated
+ return "[ lscnt=" + letterSpaceCount
+ + ", wscnt=" + wordSpaceCount
+ + ", ipd=" + areaIPD.toString()
+ + ", sidx=" + startIndex
+ + ", bidx=" + breakIndex
+ + ", hyph=" + isHyphenated
+ ", space=" + isSpace
+ "]";
}
@@ -120,7 +127,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
/** Used to reduce instantiation of MinOptMax with zero length. Do not modify! */
private static final MinOptMax ZERO_MINOPTMAX = new MinOptMax(0);
-
+
private FOText foText;
private char[] textArray;
/**
@@ -133,14 +140,8 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
private static final char NEWLINE = '\n';
private Font font = null;
- /** Start index of first character in this parent Area */
- private short iAreaStart = 0;
/** Start index of next TextArea */
- private short iNextStart = 0;
- /** Size since last makeArea call, except for last break */
- private MinOptMax ipdTotal;
- /** Size including last break possibility returned */
- // private MinOptMax nextIPD = new MinOptMax(0);
+ private short nextStart = 0;
/** size of a space character (U+0020) glyph in current font */
private int spaceCharIPD;
private MinOptMax wordSpaceIPD;
@@ -152,23 +153,23 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
/** 1/2 of word-spacing value */
private SpaceVal halfWS;
/** 1/2 of letter-spacing value */
- private SpaceVal halfLS;
- /** Number of space characters after previous possible break position. */
- private int iNbSpacesPending;
-
- private boolean bChanged = false;
- private int iReturnedIndex = 0;
- private short iThisStart = 0;
- private short iTempStart = 0;
+ private SpaceVal halfLS;
+
+ private boolean hasChanged = false;
+ private int returnedIndex = 0;
+ private short thisStart = 0;
+ private short tempStart = 0;
private LinkedList changeList = null;
private AlignmentContext alignmentContext = null;
private int lineStartBAP = 0;
private int lineEndBAP = 0;
-
+
private boolean keepTogether;
+ private final Position auxiliaryPosition = new LeafPosition(this, -1);
+
/**
* Create a Text layout manager.
*
@@ -177,7 +178,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
public TextLayoutManager(FOText node) {
super();
foText = node;
-
+
textArray = new char[node.endIndex - node.startIndex];
System.arraycopy(node.ca, node.startIndex, textArray, 0,
node.endIndex - node.startIndex);
@@ -185,22 +186,39 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
vecAreaInfo = new java.util.ArrayList();
}
-
+
+ private KnuthPenalty makeZeroWidthPenalty(int penaltyValue) {
+ return new KnuthPenalty(
+ 0,
+ penaltyValue,
+ false,
+ auxiliaryPosition,
+ true);
+ }
+
+ private KnuthBox makeAuxiliaryZeroWidthBox() {
+ return new KnuthInlineBox(
+ 0,
+ null,
+ notifyPos(new LeafPosition(this, -1)),
+ true);
+ }
+
/** {@inheritDoc} */
public void initialize() {
FontInfo fi = foText.getFOEventHandler().getFontInfo();
FontTriplet[] fontkeys = foText.getCommonFont().getFontState(fi);
font = fi.getFontInstance(fontkeys[0], foText.getCommonFont().fontSize.getValue(this));
-
+
// With CID fonts, space isn't neccesary currentFontState.width(32)
spaceCharIPD = font.getCharWidth(' ');
// Use hyphenationChar property
hyphIPD = foText.getCommonHyphenation().getHyphIPD(font);
-
+
SpaceVal ls = SpaceVal.makeLetterSpacing(foText.getLetterSpacing());
halfLS = new SpaceVal(MinOptMax.multiply(ls.getSpace(), 0.5),
ls.isConditional(), ls.isForcing(), ls.getPrecedence());
-
+
ws = SpaceVal.makeWordSpacing(foText.getWordSpacing(), ls, font);
// Make half-space: <space> on either side of a word-space)
halfWS = new SpaceVal(MinOptMax.multiply(ws.getSpace(), 0.5),
@@ -219,33 +237,9 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// in the SpaceVal.makeWordSpacing() method
letterSpaceIPD = ls.getSpace();
wordSpaceIPD = MinOptMax.add(new MinOptMax(spaceCharIPD), ws.getSpace());
-
- keepTogether = foText.getKeepTogether().getWithinLine().getEnum() == Constants.EN_ALWAYS;
-
- }
-
- // TODO: see if we can use normal getNextBreakPoss for this with
- // extra hyphenation information in LayoutContext
- private boolean getHyphenIPD(HyphContext hc, MinOptMax hyphIPD) {
- // Skip leading word-space before calculating count?
- boolean bCanHyphenate = true;
- int iStopIndex = iNextStart + hc.getNextHyphPoint();
- if (textArray.length < iStopIndex) {
- iStopIndex = textArray.length;
- bCanHyphenate = false;
- }
- hc.updateOffset(iStopIndex - iNextStart);
+ keepTogether = foText.getKeepTogether().getWithinLine().getEnum() == Constants.EN_ALWAYS;
- for (; iNextStart < iStopIndex; iNextStart++) {
- char c = textArray[iNextStart];
- hyphIPD.opt += font.getCharWidth(c);
- // letter-space?
- }
- // Need to include hyphen size too, but don't count it in the
- // stored running total, since it would be double counted
- // with later hyphenation points
- return bCanHyphenate;
}
/**
@@ -262,8 +256,8 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// Add word areas
AreaInfo ai = null;
- int iWScount = 0;
- int iLScount = 0;
+ int wordSpaceCount = 0;
+ int letterSpaceCount = 0;
int firstAreaInfoIndex = -1;
int lastAreaInfoIndex = 0;
MinOptMax realWidth = new MinOptMax(0);
@@ -281,102 +275,102 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
if (firstAreaInfoIndex == -1) {
firstAreaInfoIndex = tbpNext.getLeafPos();
}
- iWScount += ai.iWScount;
- iLScount += ai.iLScount;
- realWidth.add(ai.ipdArea);
+ wordSpaceCount += ai.wordSpaceCount;
+ letterSpaceCount += ai.letterSpaceCount;
+ realWidth.add(ai.areaIPD);
lastAreaInfoIndex = tbpNext.getLeafPos();
}
}
if (ai == null) {
return;
}
- int textLength = ai.iBreakIndex - ai.iStartIndex;
- if (ai.iLScount == textLength && !ai.bHyphenated
+ int textLength = ai.breakIndex - ai.startIndex;
+ if (ai.letterSpaceCount == textLength && !ai.isHyphenated
&& context.isLastArea()) {
// the line ends at a character like "/" or "-";
// remove the letter space after the last character
realWidth.add(MinOptMax.multiply(letterSpaceIPD, -1));
- iLScount--;
+ letterSpaceCount--;
}
-
- for (int i = ai.iStartIndex; i < ai.iBreakIndex; i++) {
- MinOptMax ladj = letterAdjustArray[i + 1];
+
+ for (int i = ai.startIndex; i < ai.breakIndex; i++) {
+ MinOptMax ladj = letterAdjustArray[i + 1];
if (ladj != null && ladj.isElastic()) {
- iLScount++;
+ letterSpaceCount++;
}
}
// add hyphenation character if the last word is hyphenated
- if (context.isLastArea() && ai.bHyphenated) {
+ if (context.isLastArea() && ai.isHyphenated) {
realWidth.add(new MinOptMax(hyphIPD));
}
// Calculate adjustments
- int iDifference = 0;
- int iTotalAdjust = 0;
- int iWordSpaceDim = wordSpaceIPD.opt;
- int iLetterSpaceDim = letterSpaceIPD.opt;
- double dIPDAdjust = context.getIPDAdjust();
+ int difference = 0;
+ int totalAdjust = 0;
+ int wordSpaceDim = wordSpaceIPD.opt;
+ int letterSpaceDim = letterSpaceIPD.opt;
+ double ipdAdjust = context.getIPDAdjust();
double dSpaceAdjust = context.getSpaceAdjust(); // not used
// calculate total difference between real and available width
- if (dIPDAdjust > 0.0) {
- iDifference = (int) ((double) (realWidth.max - realWidth.opt)
- * dIPDAdjust);
+ if (ipdAdjust > 0.0) {
+ difference = (int) ((double) (realWidth.max - realWidth.opt)
+ * ipdAdjust);
} else {
- iDifference = (int) ((double) (realWidth.opt - realWidth.min)
- * dIPDAdjust);
+ difference = (int) ((double) (realWidth.opt - realWidth.min)
+ * ipdAdjust);
}
-
+
// set letter space adjustment
- if (dIPDAdjust > 0.0) {
- iLetterSpaceDim
+ if (ipdAdjust > 0.0) {
+ letterSpaceDim
+= (int) ((double) (letterSpaceIPD.max - letterSpaceIPD.opt)
- * dIPDAdjust);
+ * ipdAdjust);
} else {
- iLetterSpaceDim
+ letterSpaceDim
+= (int) ((double) (letterSpaceIPD.opt - letterSpaceIPD.min)
- * dIPDAdjust);
+ * ipdAdjust);
}
- iTotalAdjust += (iLetterSpaceDim - letterSpaceIPD.opt) * iLScount;
+ totalAdjust += (letterSpaceDim - letterSpaceIPD.opt) * letterSpaceCount;
// set word space adjustment
- //
- if (iWScount > 0) {
- iWordSpaceDim += (int) ((iDifference - iTotalAdjust) / iWScount);
+ //
+ if (wordSpaceCount > 0) {
+ wordSpaceDim += (difference - totalAdjust) / wordSpaceCount;
} else {
// there are no word spaces in this area
}
- iTotalAdjust += (iWordSpaceDim - wordSpaceIPD.opt) * iWScount;
- if (iTotalAdjust != iDifference) {
+ totalAdjust += (wordSpaceDim - wordSpaceIPD.opt) * wordSpaceCount;
+ if (totalAdjust != difference) {
// the applied adjustment is greater or smaller than the needed one
log.trace("TextLM.addAreas: error in word / letter space adjustment = "
- + (iTotalAdjust - iDifference));
- // set iTotalAdjust = iDifference, so that the width of the TextArea
+ + (totalAdjust - difference));
+ // set totalAdjust = difference, so that the width of the TextArea
// will counterbalance the error and the other inline areas will be
// placed correctly
- iTotalAdjust = iDifference;
+ totalAdjust = difference;
}
- TextArea t = createTextArea(realWidth, iTotalAdjust, context,
+ TextArea t = createTextArea(realWidth, totalAdjust, context,
wordSpaceIPD.opt - spaceCharIPD,
firstAreaInfoIndex, lastAreaInfoIndex,
context.isLastArea());
- // iWordSpaceDim is computed in relation to wordSpaceIPD.opt
+ // wordSpaceDim is computed in relation to wordSpaceIPD.opt
// but the renderer needs to know the adjustment in relation
// to the size of the space character in the current font;
// moreover, the pdf renderer adds the character spacing even to
// the last character of a word and to space characters: in order
// to avoid this, we must subtract the letter space width twice;
// the renderer will compute the space width as:
- // space width =
+ // space width =
// = "normal" space width + letterSpaceAdjust + wordSpaceAdjust
// = spaceCharIPD + letterSpaceAdjust +
- // + (iWordSpaceDim - spaceCharIPD - 2 * letterSpaceAdjust)
- // = iWordSpaceDim - letterSpaceAdjust
- t.setTextLetterSpaceAdjust(iLetterSpaceDim);
- t.setTextWordSpaceAdjust(iWordSpaceDim - spaceCharIPD
+ // + (wordSpaceDim - spaceCharIPD - 2 * letterSpaceAdjust)
+ // = wordSpaceDim - letterSpaceAdjust
+ t.setTextLetterSpaceAdjust(letterSpaceDim);
+ t.setTextWordSpaceAdjust(wordSpaceDim - spaceCharIPD
- 2 * t.getTextLetterSpaceAdjust());
if (context.getIPDAdjust() != 0) {
// add information about space width
@@ -395,7 +389,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
* @param context the layout context
* @param spaceDiff unused
* @param firstIndex the index of the first AreaInfo used for the TextArea
- * @param lastIndex the index of the last AreaInfo used for the TextArea
+ * @param lastIndex the index of the last AreaInfo used for the TextArea
* @param isLastArea is this TextArea the last in a line?
* @return the new text area
*/
@@ -431,7 +425,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
if (areaInfo.isSpace) {
// areaInfo stores information about spaces
// add the spaces - except zero-width spaces - to the TextArea
- for (int j = areaInfo.iStartIndex; j < areaInfo.iBreakIndex; j++) {
+ for (int j = areaInfo.startIndex; j < areaInfo.breakIndex; j++) {
char spaceChar = textArray[j];
if (!CharUtilities.isZeroWidthSpace(spaceChar)) {
textArea.addSpace(spaceChar, 0,
@@ -445,13 +439,13 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
wordStartIndex = i;
len = 0;
}
- len += areaInfo.iBreakIndex - areaInfo.iStartIndex;
+ len += areaInfo.breakIndex - areaInfo.startIndex;
if (i == lastIndex || ((AreaInfo) vecAreaInfo.get(i + 1)).isSpace) {
// here ends a new word
// add a word to the TextArea
if (isLastArea
- && i == lastIndex
- && areaInfo.bHyphenated) {
+ && i == lastIndex
+ && areaInfo.isHyphenated) {
len++;
}
StringBuffer wordChars = new StringBuffer(len);
@@ -459,10 +453,10 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
int letter = 0;
for (int j = wordStartIndex; j <= i; j++) {
AreaInfo ai = (AreaInfo) vecAreaInfo.get(j);
- int lsCount = ai.iLScount;
- wordChars.append(textArray, ai.iStartIndex, ai.iBreakIndex - ai.iStartIndex);
- for (int k = 0; k < ai.iBreakIndex - ai.iStartIndex; k++) {
- MinOptMax adj = letterAdjustArray[ai.iStartIndex + k];
+ int lsCount = ai.letterSpaceCount;
+ wordChars.append(textArray, ai.startIndex, ai.breakIndex - ai.startIndex);
+ for (int k = 0; k < ai.breakIndex - ai.startIndex; k++) {
+ MinOptMax adj = letterAdjustArray[ai.startIndex + k];
if (letter > 0) {
letterAdjust[letter] = (adj != null ? adj.opt : 0);
}
@@ -475,8 +469,8 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
}
// String wordChars = new String(textArray, wordStartIndex, len);
if (isLastArea
- && i == lastIndex
- && areaInfo.bHyphenated) {
+ && i == lastIndex
+ && areaInfo.isHyphenated) {
// add the hyphenation character
wordChars.append(foText.getCommonHyphenation().getHyphChar(font));
}
@@ -487,21 +481,13 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
}
TraitSetter.addFontTraits(textArea, font);
textArea.addTrait(Trait.COLOR, foText.getColor());
-
+
TraitSetter.addTextDecoration(textArea, foText.getTextDecoration());
-
+
return textArea;
}
-
- private void addToLetterAdjust(int index, int width) {
- if (letterAdjustArray[index] == null) {
- letterAdjustArray[index] = new MinOptMax(width);
- } else {
- letterAdjustArray[index].add(width);
- }
- }
- private void addToLetterAdjust(int index, MinOptMax width) {
+ private void addToLetterAdjust(int index, int width) {
if (letterAdjustArray[index] == null) {
letterAdjustArray[index] = new MinOptMax(width);
} else {
@@ -519,7 +505,7 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
|| CharUtilities.isNonBreakableSpace(ch)
|| CharUtilities.isFixedWidthSpace(ch);
}
-
+
/** {@inheritDoc} */
public LinkedList getNextKnuthElements(LayoutContext context, int alignment) {
lineStartBAP = context.getLineStartBorderAndPaddingWidth();
@@ -533,14 +519,14 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
returnList.add(sequence);
LineBreakStatus lbs = new LineBreakStatus();
- iThisStart = iNextStart;
+ thisStart = nextStart;
boolean inWord = false;
boolean inWhitespace = false;
- char ch = 0;
- while (iNextStart < textArray.length) {
- ch = textArray[iNextStart];
+ char ch = 0;
+ while (nextStart < textArray.length) {
+ ch = textArray[nextStart];
boolean breakOpportunity = false;
- byte breakAction = keepTogether? LineBreakStatus.PROHIBITED_BREAK : lbs.nextChar(ch);
+ byte breakAction = keepTogether ? LineBreakStatus.PROHIBITED_BREAK : lbs.nextChar(ch);
switch (breakAction) {
case LineBreakStatus.COMBINING_PROHIBITED_BREAK:
case LineBreakStatus.PROHIBITED_BREAK:
@@ -558,14 +544,14 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
if (inWord) {
if (breakOpportunity || isSpace(ch) || ch == NEWLINE) {
//Word boundary found, process widths and kerning
- int lastIndex = iNextStart;
+ short lastIndex = nextStart;
while (lastIndex > 0 && textArray[lastIndex - 1] == CharUtilities.SOFT_HYPHEN) {
lastIndex--;
}
- int wordLength = lastIndex - iThisStart;
+ int wordLength = lastIndex - thisStart;
boolean kerning = font.hasKerning();
MinOptMax wordIPD = new MinOptMax(0);
- for (int i = iThisStart; i < lastIndex; i++) {
+ for (int i = thisStart; i < lastIndex; i++) {
char c = textArray[i];
//character width
@@ -575,11 +561,11 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
//kerning
if (kerning) {
int kern = 0;
- if (i > iThisStart) {
+ if (i > thisStart) {
char previous = textArray[i - 1];
kern = font.getKernValue(previous, c) * font.getFontSize() / 1000;
- } else if (prevAi != null && !prevAi.isSpace && prevAi.iBreakIndex > 0) {
- char previous = textArray[prevAi.iBreakIndex - 1];
+ } else if (prevAi != null && !prevAi.isSpace && prevAi.breakIndex > 0) {
+ char previous = textArray[prevAi.breakIndex - 1];
kern = font.getKernValue(previous, c) * font.getFontSize() / 1000;
}
if (kern != 0) {
@@ -605,94 +591,91 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
wordIPD.add(MinOptMax.multiply(letterSpaceIPD, iLetterSpaces));
// create the AreaInfo object
- ai = new AreaInfo(iThisStart, (short)lastIndex, (short) 0,
+ ai = new AreaInfo(thisStart, lastIndex, (short) 0,
(short) iLetterSpaces,
wordIPD, textArray[lastIndex] == CharUtilities.SOFT_HYPHEN, false, breakOpportunity);
- vecAreaInfo.add(ai);
prevAi = ai;
- iTempStart = iNextStart;
+ vecAreaInfo.add(ai);
+ tempStart = nextStart;
- // create the elements
- sequence.addAll(createElementsForAWordFragment(alignment, ai,
- vecAreaInfo.size() - 1, letterSpaceIPD));
+ //add the elements
+ addElementsForAWordFragment(sequence, alignment, ai,
+ vecAreaInfo.size() - 1, letterSpaceIPD);
ai = null;
-
- iThisStart = iNextStart;
+ thisStart = nextStart;
}
} else if (inWhitespace) {
if (ch != CharUtilities.SPACE || breakOpportunity) {
// End of whitespace
// create the AreaInfo object
- ai = new AreaInfo(iThisStart, (short) (iNextStart),
- (short) (iNextStart - iThisStart), (short) 0,
- MinOptMax.multiply(wordSpaceIPD, iNextStart - iThisStart),
- false, true, breakOpportunity);
+ ai = new AreaInfo(thisStart, nextStart,
+ (short) (nextStart - thisStart), (short) 0,
+ MinOptMax.multiply(wordSpaceIPD, nextStart - thisStart),
+ false, true, breakOpportunity);
vecAreaInfo.add(ai);
prevAi = ai;
// create the elements
- sequence.addAll
- (createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
+ addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;
- iThisStart = iNextStart;
+ thisStart = nextStart;
}
} else {
if (ai != null) {
vecAreaInfo.add(ai);
prevAi = ai;
- ai.breakOppAfter = ch == CharUtilities.SPACE || breakOpportunity;
- sequence.addAll
- (createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
+ ai.breakOppAfter = (ch == CharUtilities.SPACE) || breakOpportunity;
+ addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;
}
if (breakAction == LineBreakStatus.EXPLICIT_BREAK) {
if (lineEndBAP != 0) {
- sequence.add
- (new KnuthGlue(lineEndBAP, 0, 0,
- new LeafPosition(this, -1), true));
+ sequence.add(
+ new KnuthGlue(lineEndBAP, 0, 0,
+ auxiliaryPosition, true));
}
sequence.endSequence();
sequence = new InlineKnuthSequence();
returnList.add(sequence);
}
}
-
- if ((ch == CharUtilities.SPACE
- && foText.getWhitespaceTreatment() == Constants.EN_PRESERVE)
+
+ if ((ch == CharUtilities.SPACE
+ && foText.getWhitespaceTreatment() == Constants.EN_PRESERVE)
|| ch == CharUtilities.NBSPACE) {
// preserved space or non-breaking space:
// create the AreaInfo object
- ai = new AreaInfo(iNextStart, (short) (iNextStart + 1),
+ ai = new AreaInfo(nextStart, (short) (nextStart + 1),
(short) 1, (short) 0,
wordSpaceIPD, false, true, breakOpportunity);
- iThisStart = (short) (iNextStart + 1);
+ thisStart = (short) (nextStart + 1);
} else if (CharUtilities.isFixedWidthSpace(ch) || CharUtilities.isZeroWidthSpace(ch)) {
// create the AreaInfo object
MinOptMax ipd = new MinOptMax(font.getCharWidth(ch));
- ai = new AreaInfo(iNextStart, (short) (iNextStart + 1),
+ ai = new AreaInfo(nextStart, (short) (nextStart + 1),
(short) 0, (short) 0,
- ipd, false, true, breakOpportunity);
- iThisStart = (short) (iNextStart + 1);
+ ipd, false, true, breakOpportunity);
+ thisStart = (short) (nextStart + 1);
} else if (ch == NEWLINE) {
// linefeed; this can happen when linefeed-treatment="preserve"
- iThisStart = (short) (iNextStart + 1);
+ thisStart = (short) (nextStart + 1);
}
inWord = !isSpace(ch) && ch != NEWLINE;
inWhitespace = ch == CharUtilities.SPACE && foText.getWhitespaceTreatment() != Constants.EN_PRESERVE;
- iNextStart++;
+ nextStart++;
} // end of while
-
+
// Process any last elements
if (inWord) {
- int lastIndex = iNextStart;
- if (textArray[iNextStart - 1] == CharUtilities.SOFT_HYPHEN) {
+ int lastIndex = nextStart;
+ if (textArray[nextStart - 1] == CharUtilities.SOFT_HYPHEN) {
lastIndex--;
}
- int wordLength = lastIndex - iThisStart;
+ int wordLength = lastIndex - thisStart;
boolean kerning = font.hasKerning();
MinOptMax wordIPD = new MinOptMax(0);
- for (int i = iThisStart; i < lastIndex; i++) {
+ for (int i = thisStart; i < lastIndex; i++) {
char c = textArray[i];
//character width
@@ -702,11 +685,11 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
//kerning
if (kerning) {
int kern = 0;
- if (i > iThisStart) {
+ if (i > thisStart) {
char previous = textArray[i - 1];
kern = font.getKernValue(previous, c) * font.getFontSize() / 1000;
} else if (prevAi != null && !prevAi.isSpace) {
- char previous = textArray[prevAi.iBreakIndex - 1];
+ char previous = textArray[prevAi.breakIndex - 1];
kern = font.getKernValue(previous, c) * font.getFontSize() / 1000;
}
if (kern != 0) {
@@ -720,38 +703,36 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
wordIPD.add(MinOptMax.multiply(letterSpaceIPD, iLetterSpaces));
// create the AreaInfo object
- ai = new AreaInfo(iThisStart, (short)lastIndex, (short) 0,
+ ai = new AreaInfo(thisStart, (short)lastIndex, (short) 0,
(short) iLetterSpaces,
wordIPD, false, false, false);
vecAreaInfo.add(ai);
- iTempStart = iNextStart;
+ tempStart = nextStart;
// create the elements
- sequence.addAll(createElementsForAWordFragment(alignment, ai,
- vecAreaInfo.size() - 1, letterSpaceIPD));
+ addElementsForAWordFragment(sequence, alignment, ai,
+ vecAreaInfo.size() - 1, letterSpaceIPD);
ai = null;
} else if (inWhitespace) {
- ai = new AreaInfo(iThisStart, (short) (iNextStart),
- (short) (iNextStart - iThisStart), (short) 0,
- MinOptMax.multiply(wordSpaceIPD, iNextStart - iThisStart),
- false, true, true);
+ ai = new AreaInfo(thisStart, (short) (nextStart),
+ (short) (nextStart - thisStart), (short) 0,
+ MinOptMax.multiply(wordSpaceIPD, nextStart - thisStart),
+ false, true, true);
vecAreaInfo.add(ai);
// create the elements
- sequence.addAll
- (createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
+ addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;
} else if (ai != null) {
vecAreaInfo.add(ai);
ai.breakOppAfter = ch == CharUtilities.ZERO_WIDTH_SPACE;
- sequence.addAll
- (createElementsForASpace(alignment, ai, vecAreaInfo.size() - 1));
+ addElementsForASpace(sequence, alignment, ai, vecAreaInfo.size() - 1);
ai = null;
} else if (ch == NEWLINE) {
if (lineEndBAP != 0) {
sequence.add
(new KnuthGlue(lineEndBAP, 0, 0,
- new LeafPosition(this, -1), true));
+ auxiliaryPosition, true));
}
sequence.endSequence();
sequence = new InlineKnuthSequence();
@@ -782,29 +763,29 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
//element could refer to '-1' position, for non-collapsed spaces (?)
if (idx > -1) {
AreaInfo ai = (AreaInfo) vecAreaInfo.get(idx);
- ai.iLScount++;
- ai.ipdArea.add(letterSpaceIPD);
- if (BREAK_CHARS.indexOf(textArray[iTempStart - 1]) >= 0) {
+ ai.letterSpaceCount++;
+ ai.areaIPD.add(letterSpaceIPD);
+ if (BREAK_CHARS.indexOf(textArray[tempStart - 1]) >= 0) {
// the last character could be used as a line break
// append new elements to oldList
oldListIterator = oldList.listIterator(oldList.size());
oldListIterator.add(new KnuthPenalty(0, KnuthPenalty.FLAGGED_PENALTY, true,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
oldListIterator.add(new KnuthGlue(letterSpaceIPD.opt,
letterSpaceIPD.max - letterSpaceIPD.opt,
letterSpaceIPD.opt - letterSpaceIPD.min,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
} else if (letterSpaceIPD.min == letterSpaceIPD.max) {
// constant letter space: replace the box
- oldListIterator.set(new KnuthInlineBox(ai.ipdArea.opt, alignmentContext, pos, false));
+ oldListIterator.set(new KnuthInlineBox(ai.areaIPD.opt, alignmentContext, pos, false));
} else {
// adjustable letter space: replace the glue
oldListIterator.next(); // this would return the penalty element
oldListIterator.next(); // this would return the glue element
- oldListIterator.set(new KnuthGlue(ai.iLScount * letterSpaceIPD.opt,
- ai.iLScount * (letterSpaceIPD.max - letterSpaceIPD.opt),
- ai.iLScount * (letterSpaceIPD.opt - letterSpaceIPD.min),
- new LeafPosition(this, -1), true));
+ oldListIterator.set(new KnuthGlue(ai.letterSpaceCount * letterSpaceIPD.opt,
+ ai.letterSpaceCount * (letterSpaceIPD.max - letterSpaceIPD.opt),
+ ai.letterSpaceCount * (letterSpaceIPD.opt - letterSpaceIPD.min),
+ auxiliaryPosition, true));
}
}
return oldList;
@@ -844,37 +825,37 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
public void hyphenate(Position pos, HyphContext hc) {
AreaInfo ai
= (AreaInfo) vecAreaInfo.get(((LeafPosition) pos).getLeafPos());
- int iStartIndex = ai.iStartIndex;
- int iStopIndex;
- boolean bNothingChanged = true;
+ int startIndex = ai.startIndex;
+ int stopIndex;
+ boolean nothingChanged = true;
- while (iStartIndex < ai.iBreakIndex) {
+ while (startIndex < ai.breakIndex) {
MinOptMax newIPD = new MinOptMax(0);
- boolean bHyphenFollows;
+ boolean hyphenFollows;
if (hc.hasMoreHyphPoints()
- && (iStopIndex = iStartIndex + hc.getNextHyphPoint())
- <= ai.iBreakIndex) {
- // iStopIndex is the index of the first character
+ && (stopIndex = startIndex + hc.getNextHyphPoint())
+ <= ai.breakIndex) {
+ // stopIndex is the index of the first character
// after a hyphenation point
- bHyphenFollows = true;
+ hyphenFollows = true;
} else {
// there are no more hyphenation points,
- // or the next one is after ai.iBreakIndex
- bHyphenFollows = false;
- iStopIndex = ai.iBreakIndex;
+ // or the next one is after ai.breakIndex
+ hyphenFollows = false;
+ stopIndex = ai.breakIndex;
}
- hc.updateOffset(iStopIndex - iStartIndex);
+ hc.updateOffset(stopIndex - startIndex);
- //log.info("Word: " + new String(textArray, iStartIndex, iStopIndex - iStartIndex));
- for (int i = iStartIndex; i < iStopIndex; i++) {
+ //log.info("Word: " + new String(textArray, startIndex, stopIndex - startIndex));
+ for (int i = startIndex; i < stopIndex; i++) {
char c = textArray[i];
newIPD.add(new MinOptMax(font.getCharWidth(c)));
- //if (i > iStartIndex) {
- if (i < iStopIndex) {
+ //if (i > startIndex) {
+ if (i < stopIndex) {
MinOptMax la = this.letterAdjustArray[i + 1];
- if ((i == iStopIndex - 1) && bHyphenFollows) {
+ if ((i == stopIndex - 1) && hyphenFollows) {
//the letter adjust here needs to be handled further down during
//element generation because it depends on hyph/no-hyph condition
la = null;
@@ -885,69 +866,66 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
}
}
// add letter spaces
- boolean bIsWordEnd
- = iStopIndex == ai.iBreakIndex
- && ai.iLScount < (ai.iBreakIndex - ai.iStartIndex);
+ boolean isWordEnd
+ = stopIndex == ai.breakIndex
+ && ai.letterSpaceCount < (ai.breakIndex - ai.startIndex);
newIPD.add(MinOptMax.multiply(letterSpaceIPD,
- (bIsWordEnd
- ? (iStopIndex - iStartIndex - 1)
- : (iStopIndex - iStartIndex))));
+ (isWordEnd
+ ? (stopIndex - startIndex - 1)
+ : (stopIndex - startIndex))));
- if (!(bNothingChanged
- && iStopIndex == ai.iBreakIndex
- && bHyphenFollows == false)) {
+ if (!(nothingChanged
+ && stopIndex == ai.breakIndex
+ && !hyphenFollows)) {
// the new AreaInfo object is not equal to the old one
if (changeList == null) {
changeList = new LinkedList();
}
changeList.add
(new PendingChange
- (new AreaInfo((short) iStartIndex, (short) iStopIndex,
+ (new AreaInfo((short) startIndex, (short) stopIndex,
(short) 0,
- (short) (bIsWordEnd
- ? (iStopIndex - iStartIndex - 1)
- : (iStopIndex - iStartIndex)),
- newIPD, bHyphenFollows, false, false),
+ (short) (isWordEnd
+ ? (stopIndex - startIndex - 1)
+ : (stopIndex - startIndex)),
+ newIPD, hyphenFollows, false, false),
((LeafPosition) pos).getLeafPos()));
- bNothingChanged = false;
+ nothingChanged = false;
}
- iStartIndex = iStopIndex;
- }
- if (!bChanged && !bNothingChanged) {
- bChanged = true;
+ startIndex = stopIndex;
}
+ hasChanged = !nothingChanged;
}
/** {@inheritDoc} */
public boolean applyChanges(List oldList) {
setFinished(false);
- if (changeList != null) {
- int iAddedAI = 0;
- int iRemovedAI = 0;
- int iOldIndex = -1;
- PendingChange currChange = null;
+ if (changeList != null && !changeList.isEmpty()) {
+ int areaInfosAdded = 0;
+ int areaInfosRemoved = 0;
+ int oldIndex = -1, changeIndex;
+ PendingChange currChange;
ListIterator changeListIterator = changeList.listIterator();
while (changeListIterator.hasNext()) {
currChange = (PendingChange) changeListIterator.next();
- if (currChange.index != iOldIndex) {
- iRemovedAI++;
- iAddedAI++;
- iOldIndex = currChange.index;
- vecAreaInfo.remove(currChange.index + iAddedAI - iRemovedAI);
- vecAreaInfo.add(currChange.index + iAddedAI - iRemovedAI,
- currChange.ai);
+ if (currChange.index != oldIndex) {
+ areaInfosRemoved++;
+ areaInfosAdded++;
+ oldIndex = currChange.index;
+ changeIndex = currChange.index + areaInfosAdded - areaInfosRemoved;
+ vecAreaInfo.remove(changeIndex);
} else {
- iAddedAI++;
- vecAreaInfo.add(currChange.index + iAddedAI - iRemovedAI,
- currChange.ai);
+ areaInfosAdded++;
+ changeIndex = currChange.index + areaInfosAdded - areaInfosRemoved;
}
+ vecAreaInfo.add(changeIndex, currChange.ai);
}
changeList.clear();
}
- iReturnedIndex = 0;
- return bChanged;
+ returnedIndex = 0;
+ return hasChanged;
}
/** {@inheritDoc} */
@@ -959,18 +937,16 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
LinkedList returnList = new LinkedList();
- while (iReturnedIndex < vecAreaInfo.size()) {
- AreaInfo ai = (AreaInfo) vecAreaInfo.get(iReturnedIndex);
- if (ai.iWScount == 0) {
+ while (returnedIndex < vecAreaInfo.size()) {
+ AreaInfo ai = (AreaInfo) vecAreaInfo.get(returnedIndex);
+ if (ai.wordSpaceCount == 0) {
// ai refers either to a word or a word fragment
- returnList.addAll
- (createElementsForAWordFragment(alignment, ai, iReturnedIndex, letterSpaceIPD));
+ addElementsForAWordFragment(returnList, alignment, ai, returnedIndex, letterSpaceIPD);
} else {
// ai refers to a space
- returnList.addAll
- (createElementsForASpace(alignment, ai, iReturnedIndex));
+ addElementsForASpace(returnList, alignment, ai, returnedIndex);
}
- iReturnedIndex++;
+ returnedIndex++;
} // end of while
setFinished(true);
//ElementListObserver.observe(returnList, "text-changed", null);
@@ -979,63 +955,55 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
/** {@inheritDoc} */
public void getWordChars(StringBuffer sbChars, Position pos) {
- int iLeafValue = ((LeafPosition) pos).getLeafPos();
- if (iLeafValue != -1) {
- AreaInfo ai = (AreaInfo) vecAreaInfo.get(iLeafValue);
- sbChars.append(new String(textArray, ai.iStartIndex,
- ai.iBreakIndex - ai.iStartIndex));
+ int leafValue = ((LeafPosition) pos).getLeafPos();
+ if (leafValue != -1) {
+ AreaInfo ai = (AreaInfo) vecAreaInfo.get(leafValue);
+ sbChars.append(textArray, ai.startIndex, ai.breakIndex - ai.startIndex);
}
}
- private LinkedList createElementsForASpace(int alignment,
- AreaInfo ai, int leafValue) {
- LinkedList spaceElements = new LinkedList();
+ private void addElementsForASpace(List baseList,
+ int alignment,
+ AreaInfo ai,
+ int leafValue) {
LeafPosition mainPosition = new LeafPosition(this, leafValue);
-
+
if (!ai.breakOppAfter) {
// a non-breaking space
if (alignment == EN_JUSTIFY) {
// the space can stretch and shrink, and must be preserved
// when starting a line
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), true));
- spaceElements.add(new KnuthPenalty(0, KnuthElement.INFINITE,
- false, new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt, ai.ipdArea.max - ai.ipdArea.opt,
- ai.ipdArea.opt - ai.ipdArea.min, mainPosition, false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(ai.areaIPD.opt, ai.areaIPD.max - ai.areaIPD.opt,
+ ai.areaIPD.opt - ai.areaIPD.min, mainPosition, false));
} else {
// the space does not need to stretch or shrink, and must be
// preserved when starting a line
- spaceElements.add(new KnuthInlineBox(ai.ipdArea.opt, null,
+ baseList.add(new KnuthInlineBox(ai.areaIPD.opt, null,
mainPosition, true));
}
} else {
- if (textArray[ai.iStartIndex] != CharUtilities.SPACE
+ if (textArray[ai.startIndex] != CharUtilities.SPACE
|| foText.getWhitespaceTreatment() == Constants.EN_PRESERVE) {
// a breaking space that needs to be preserved
switch (alignment) {
case EN_CENTER:
// centered text:
- // if the second element is chosen as a line break these elements
+ // if the second element is chosen as a line break these elements
// add a constant amount of stretch at the end of a line and at the
// beginning of the next one, otherwise they don't add any stretch
- spaceElements.add(new KnuthGlue(lineEndBAP,
+ baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- spaceElements
- .add(new KnuthPenalty(
- 0,
- 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(
- (lineStartBAP + lineEndBAP), -6
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0, KnuthElement.INFINITE,
- false, new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt + lineStartBAP,
+ auxiliaryPosition, false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(ai.areaIPD.opt + lineStartBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
break;
@@ -1043,124 +1011,102 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
case EN_START: // fall through
case EN_END:
// left- or right-aligned text:
- // if the second element is chosen as a line break these elements
+ // if the second element is chosen as a line break these elements
// add a constant amount of stretch at the end of a line, otherwise
// they don't add any stretch
- spaceElements.add(new KnuthGlue(lineEndBAP,
+ baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthPenalty(0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(
- (lineStartBAP + lineEndBAP), -3
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0,
- KnuthElement.INFINITE, false, new LeafPosition(
- this, -1), false));
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt + lineStartBAP, 0, 0,
+ auxiliaryPosition, false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(ai.areaIPD.opt + lineStartBAP, 0, 0,
mainPosition, false));
break;
case EN_JUSTIFY:
// justified text:
// the stretch and shrink depends on the space width
- spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthPenalty(0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(
- - (lineStartBAP + lineEndBAP), ai.ipdArea.max
- - ai.ipdArea.opt, ai.ipdArea.opt - ai.ipdArea.min,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0,
- KnuthElement.INFINITE, false, new LeafPosition(
- this, -1), false));
- spaceElements.add(new KnuthGlue(lineStartBAP + ai.ipdArea.opt, 0, 0,
+ baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(
+ - (lineStartBAP + lineEndBAP), ai.areaIPD.max
+ - ai.areaIPD.opt, ai.areaIPD.opt - ai.areaIPD.min,
+ auxiliaryPosition, false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP + ai.areaIPD.opt, 0, 0,
mainPosition, false));
break;
default:
// last line justified, the other lines unjustified:
// use only the space stretch
- spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthPenalty(0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(
- - (lineStartBAP + lineEndBAP), ai.ipdArea.max
- - ai.ipdArea.opt, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0,
- KnuthElement.INFINITE, false, new LeafPosition(
- this, -1), false));
- spaceElements.add(new KnuthGlue(lineStartBAP + ai.ipdArea.opt, 0, 0,
+ baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(
+ - (lineStartBAP + lineEndBAP), ai.areaIPD.max
+ - ai.areaIPD.opt, 0,
+ auxiliaryPosition, false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP + ai.areaIPD.opt, 0, 0,
mainPosition, false));
- }
+ }
} else {
// a (possible block) of breaking spaces
switch (alignment) {
case EN_CENTER:
// centered text:
- // if the second element is chosen as a line break these elements
+ // if the second element is chosen as a line break these elements
// add a constant amount of stretch at the end of a line and at the
// beginning of the next one, otherwise they don't add any stretch
- spaceElements.add(new KnuthGlue(lineEndBAP,
+ baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- spaceElements
- .add(new KnuthPenalty(
- 0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(ai.areaIPD.opt
- (lineStartBAP + lineEndBAP), -6
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0, KnuthElement.INFINITE,
- false, new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(lineStartBAP,
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
break;
case EN_START: // fall through
case EN_END:
// left- or right-aligned text:
- // if the second element is chosen as a line break these elements
+ // if the second element is chosen as a line break these elements
// add a constant amount of stretch at the end of a line, otherwise
// they don't add any stretch
if (lineStartBAP != 0 || lineEndBAP != 0) {
- spaceElements.add(new KnuthGlue(lineEndBAP,
+ baseList.add(new KnuthGlue(lineEndBAP,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthPenalty(0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(ai.areaIPD.opt
- (lineStartBAP + lineEndBAP), -3
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0,
- KnuthElement.INFINITE, false, new LeafPosition(
- this, -1), false));
- spaceElements.add(new KnuthGlue(lineStartBAP, 0, 0,
- new LeafPosition(this, -1), false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
+ auxiliaryPosition, false));
} else {
- spaceElements.add(new KnuthGlue(0,
+ baseList.add(new KnuthGlue(0,
3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthPenalty(0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt, -3
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(ai.areaIPD.opt, -3
* LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
mainPosition, false));
}
@@ -1170,26 +1116,22 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// justified text:
// the stretch and shrink depends on the space width
if (lineStartBAP != 0 || lineEndBAP != 0) {
- spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthPenalty(0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(
- ai.ipdArea.opt - (lineStartBAP + lineEndBAP),
- ai.ipdArea.max - ai.ipdArea.opt,
- ai.ipdArea.opt - ai.ipdArea.min,
+ baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(
+ ai.areaIPD.opt - (lineStartBAP + lineEndBAP),
+ ai.areaIPD.max - ai.areaIPD.opt,
+ ai.areaIPD.opt - ai.areaIPD.min,
mainPosition, false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0,
- KnuthElement.INFINITE, false, new LeafPosition(
- this, -1), false));
- spaceElements.add(new KnuthGlue(lineStartBAP, 0, 0,
- new LeafPosition(this, -1), false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
+ auxiliaryPosition, false));
} else {
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt,
- ai.ipdArea.max - ai.ipdArea.opt,
- ai.ipdArea.opt - ai.ipdArea.min,
+ baseList.add(new KnuthGlue(ai.areaIPD.opt,
+ ai.areaIPD.max - ai.areaIPD.opt,
+ ai.areaIPD.opt - ai.areaIPD.min,
mainPosition, false));
}
break;
@@ -1198,279 +1140,190 @@ public class TextLayoutManager extends LeafNodeLayoutManager {
// last line justified, the other lines unjustified:
// use only the space stretch
if (lineStartBAP != 0 || lineEndBAP != 0) {
- spaceElements.add(new KnuthGlue(lineEndBAP, 0, 0,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthPenalty(0, 0, false,
- new LeafPosition(this, -1), false));
- spaceElements.add(new KnuthGlue(
- ai.ipdArea.opt - (lineStartBAP + lineEndBAP),
- ai.ipdArea.max - ai.ipdArea.opt,
+ baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
+ auxiliaryPosition, false));
+ baseList.add(makeZeroWidthPenalty(0));
+ baseList.add(new KnuthGlue(
+ ai.areaIPD.opt - (lineStartBAP + lineEndBAP),
+ ai.areaIPD.max - ai.areaIPD.opt,
0, mainPosition, false));
- spaceElements.add(new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- spaceElements.add(new KnuthPenalty(0,
- KnuthElement.INFINITE, false, new LeafPosition(
- this, -1), false));
- spaceElements.add(new KnuthGlue(lineStartBAP, 0, 0,
- new LeafPosition(this, -1), false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
+ auxiliaryPosition, false));
} else {
- spaceElements.add(new KnuthGlue(ai.ipdArea.opt,
- ai.ipdArea.max - ai.ipdArea.opt, 0,
+ baseList.add(new KnuthGlue(ai.areaIPD.opt,
+ ai.areaIPD.max - ai.areaIPD.opt, 0,
mainPosition, false));
}
}
}
}
-
- return spaceElements;
}
- private LinkedList createElementsForAWordFragment(int alignment,
- AreaInfo ai, int leafValue, MinOptMax letterSpaceWidth) {
- LinkedList wordElements = new LinkedList();
+ private void addElementsForAWordFragment(List baseList,
+ int alignment,
+ AreaInfo ai,
+ int leafValue,
+ MinOptMax letterSpaceWidth) {
+
LeafPosition mainPosition = new LeafPosition(this, leafValue);
// if the last character of the word fragment is '-' or '/',
// the fragment could end a line; in this case, it loses one
// of its letter spaces;
- boolean bSuppressibleLetterSpace = ai.breakOppAfter && !ai.bHyphenated;
+ boolean suppressibleLetterSpace = ai.breakOppAfter && !ai.isHyphenated;
if (letterSpaceWidth.min == letterSpaceWidth.max) {
// constant letter spacing
- wordElements.add
- (new KnuthInlineBox(
- bSuppressibleLetterSpace
- ? ai.ipdArea.opt - letterSpaceWidth.opt
- : ai.ipdArea.opt,
+ baseList.add(new KnuthInlineBox(
+ suppressibleLetterSpace
+ ? ai.areaIPD.opt - letterSpaceWidth.opt
+ : ai.areaIPD.opt,
alignmentContext,
notifyPos(mainPosition), false));
} else {
// adjustable letter spacing
- int unsuppressibleLetterSpaces
- = bSuppressibleLetterSpace ? ai.iLScount - 1 : ai.iLScount;
- wordElements.add
- (new KnuthInlineBox(ai.ipdArea.opt
- - ai.iLScount * letterSpaceWidth.opt,
+ int unsuppressibleLetterSpaces
+ = suppressibleLetterSpace ? ai.letterSpaceCount - 1 : ai.letterSpaceCount;
+ baseList.add
+ (new KnuthInlineBox(ai.areaIPD.opt
+ - ai.letterSpaceCount * letterSpaceWidth.opt,
alignmentContext,
notifyPos(mainPosition), false));
- wordElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), true));
- wordElements.add
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add
(new KnuthGlue(unsuppressibleLetterSpaces * letterSpaceWidth.opt,
unsuppressibleLetterSpaces * (letterSpaceWidth.max - letterSpaceWidth.opt),
unsuppressibleLetterSpaces * (letterSpaceWidth.opt - letterSpaceWidth.min),
- new LeafPosition(this, -1), true));
- wordElements.add
- (new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), true));
+ auxiliaryPosition, true));
+ baseList.add(makeAuxiliaryZeroWidthBox());
}
-
+
// extra-elements if the word fragment is the end of a syllable,
// or it ends with a character that can be used as a line break
- if (ai.bHyphenated) {
+ if (ai.isHyphenated) {
MinOptMax widthIfNoBreakOccurs = null;
- if (ai.iBreakIndex < textArray.length) {
+ if (ai.breakIndex < textArray.length) {
//Add in kerning in no-break condition
- widthIfNoBreakOccurs = letterAdjustArray[ai.iBreakIndex];
+ widthIfNoBreakOccurs = letterAdjustArray[ai.breakIndex];
}
- //if (ai.iBreakIndex)
-
+ //if (ai.breakIndex)
+
// the word fragment ends at the end of a syllable:
// if a break occurs the content width increases,
// otherwise nothing happens
- wordElements.addAll(createElementsForAHyphen(alignment, hyphIPD, widthIfNoBreakOccurs, ai.breakOppAfter && ai.bHyphenated));
- } else if (bSuppressibleLetterSpace) {
+ addElementsForAHyphen(baseList, alignment, hyphIPD, widthIfNoBreakOccurs, ai.breakOppAfter && ai.isHyphenated);
+ } else if (suppressibleLetterSpace) {
// the word fragment ends with a character that acts as a hyphen
// if a break occurs the width does not increase,
// otherwise there is one more letter space
- wordElements.addAll(createElementsForAHyphen(alignment, 0, letterSpaceWidth, true));
+ addElementsForAHyphen(baseList, alignment, 0, letterSpaceWidth, true);
}
- return wordElements;
}
// static final int SOFT_HYPHEN_PENALTY = KnuthPenalty.FLAGGED_PENALTY / 10;
static final int SOFT_HYPHEN_PENALTY = 1;
- private LinkedList createElementsForAHyphen(int alignment,
- int widthIfBreakOccurs, MinOptMax widthIfNoBreakOccurs, boolean unflagged) {
+
+ private void addElementsForAHyphen(List baseList,
+ int alignment,
+ int widthIfBreakOccurs,
+ MinOptMax widthIfNoBreakOccurs,
+ boolean unflagged) {
if (widthIfNoBreakOccurs == null) {
widthIfNoBreakOccurs = ZERO_MINOPTMAX;
}
- LinkedList hyphenElements = new LinkedList();
-
+
switch (alignment) {
case EN_CENTER :
// centered text:
- /*
- hyphenElements.add
- (new KnuthGlue(0, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthPenalty(hyphIPD,
- KnuthPenalty.FLAGGED_PENALTY, true,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(0,
- - 6 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthInlineBox(0, 0, 0, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, true,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(0, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- */
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), true));
- hyphenElements.add
- (new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), true));
- hyphenElements.add
- (new KnuthPenalty(hyphIPD,
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
+ auxiliaryPosition, true));
+ baseList.add(new KnuthPenalty(hyphIPD,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(-(lineEndBAP + lineStartBAP),
+ auxiliaryPosition, false));
+ baseList.add(new KnuthGlue(-(lineEndBAP + lineStartBAP),
-6 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), true));
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), true));
- hyphenElements.add
- (new KnuthGlue(lineStartBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), true));
+ auxiliaryPosition, false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
+ auxiliaryPosition, true));
break;
-
+
case EN_START : // fall through
case EN_END :
// left- or right-aligned text:
- /*
- hyphenElements.add
- (new KnuthGlue(0, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthPenalty(widthIfBreakOccurs,
- KnuthPenalty.FLAGGED_PENALTY, true,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(widthIfNoBreakOccurs.opt,
- - 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- */
if (lineStartBAP != 0 || lineEndBAP != 0) {
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), true));
- hyphenElements.add
- (new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthPenalty(widthIfBreakOccurs,
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineEndBAP, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
+ auxiliaryPosition, false));
+ baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
+ auxiliaryPosition, false));
+ baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
-3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(lineStartBAP, 0, 0,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
+ auxiliaryPosition, false));
} else {
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), true));
- hyphenElements.add
- (new KnuthGlue(0, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthPenalty(widthIfBreakOccurs,
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(0, 3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
+ auxiliaryPosition, false));
+ baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(widthIfNoBreakOccurs.opt,
+ auxiliaryPosition, false));
+ baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt,
-3 * LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
}
break;
-
+
default:
// justified text, or last line justified:
// just a flagged penalty
- /*
- hyphenElements.add
- (new KnuthPenalty(widthIfBreakOccurs,
- KnuthPenalty.FLAGGED_PENALTY, true,
- new LeafPosition(this, -1), false));
- */
if (lineStartBAP != 0 || lineEndBAP != 0) {
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), true));
-
- hyphenElements.add
- (new KnuthGlue(lineEndBAP, 0, 0,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthPenalty(widthIfBreakOccurs,
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineEndBAP, 0, 0,
+ auxiliaryPosition, false));
+ baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
// extra elements representing a letter space that is suppressed
// if a break occurs
if (widthIfNoBreakOccurs.min != 0
|| widthIfNoBreakOccurs.max != 0) {
- hyphenElements.add
- (new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
+ baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt - (lineStartBAP + lineEndBAP),
widthIfNoBreakOccurs.max - widthIfNoBreakOccurs.opt,
widthIfNoBreakOccurs.opt - widthIfNoBreakOccurs.min,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
} else {
- hyphenElements.add
- (new KnuthGlue(-(lineStartBAP + lineEndBAP), 0, 0,
- new LeafPosition(this, -1), false));
+ baseList.add(new KnuthGlue(-(lineStartBAP + lineEndBAP), 0, 0,
+ auxiliaryPosition, false));
}
- hyphenElements.add
- (new KnuthInlineBox(0, null,
- notifyPos(new LeafPosition(this, -1)), false));
- hyphenElements.add
- (new KnuthPenalty(0, KnuthElement.INFINITE, false,
- new LeafPosition(this, -1), false));
- hyphenElements.add
- (new KnuthGlue(lineStartBAP, 0, 0,
- new LeafPosition(this, -1), false));
+ baseList.add(makeAuxiliaryZeroWidthBox());
+ baseList.add(makeZeroWidthPenalty(KnuthPenalty.INFINITE));
+ baseList.add(new KnuthGlue(lineStartBAP, 0, 0,
+ auxiliaryPosition, false));
} else {
- hyphenElements.add
- (new KnuthPenalty(widthIfBreakOccurs,
+ baseList.add(new KnuthPenalty(widthIfBreakOccurs,
unflagged ? SOFT_HYPHEN_PENALTY : KnuthPenalty.FLAGGED_PENALTY, !unflagged,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
// extra elements representing a letter space that is suppressed
// if a break occurs
if (widthIfNoBreakOccurs.min != 0
|| widthIfNoBreakOccurs.max != 0) {
- hyphenElements.add
- (new KnuthGlue(widthIfNoBreakOccurs.opt,
+ baseList.add(new KnuthGlue(widthIfNoBreakOccurs.opt,
widthIfNoBreakOccurs.max - widthIfNoBreakOccurs.opt,
widthIfNoBreakOccurs.opt - widthIfNoBreakOccurs.min,
- new LeafPosition(this, -1), false));
+ auxiliaryPosition, false));
}
}
}
-
- return hyphenElements;
- }
-}
-
+ }
+}
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
index 430356bec..6afb57dca 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
@@ -83,7 +83,6 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
*/
public TableCellLayoutManager(TableCell node, PrimaryGridUnit pgu) {
super(node);
- fobj = node;
this.primaryGridUnit = pgu;
}
diff --git a/src/java/org/apache/fop/render/pcl/PCLRenderer.java b/src/java/org/apache/fop/render/pcl/PCLRenderer.java
index b89fba9c1..921856b07 100644
--- a/src/java/org/apache/fop/render/pcl/PCLRenderer.java
+++ b/src/java/org/apache/fop/render/pcl/PCLRenderer.java
@@ -156,6 +156,11 @@ public class PCLRenderer extends PrintRenderer {
*/
private boolean disabledPJL = false;
+ /** contains the pageWith of the last printed page */
+ private long pageWidth = 0;
+ /** contains the pageHeight of the last printed page */
+ private long pageHeight = 0;
+
/**
* Create the PCL renderer
*/
@@ -416,29 +421,34 @@ public class PCLRenderer extends PrintRenderer {
}
private void selectPageFormat(long pagewidth, long pageheight) throws IOException {
- this.currentPageDefinition = PCLPageDefinition.getPageDefinition(
- pagewidth, pageheight, 1000);
-
- if (this.currentPageDefinition == null) {
- this.currentPageDefinition = PCLPageDefinition.getDefaultPageDefinition();
- PCLEventProducer eventProducer = PCLEventProducer.Provider.get(
- getUserAgent().getEventBroadcaster());
- eventProducer.paperTypeUnavailable(this, pagewidth, pageheight,
- this.currentPageDefinition.getName());
- }
- if (log.isDebugEnabled()) {
- log.debug("page size: " + currentPageDefinition.getPhysicalPageSize());
- log.debug("logical page: " + currentPageDefinition.getLogicalPageRect());
- }
- if (this.currentPageDefinition.isLandscapeFormat()) {
- gen.writeCommand("&l1O"); //Orientation
- } else {
- gen.writeCommand("&l0O"); //Orientation
+ //Only set the page format if it changes (otherwise duplex printing won't work)
+ if ((pagewidth != this.pageWidth) || (pageheight != this.pageHeight)) {
+ this.pageWidth = pagewidth;
+ this.pageHeight = pageheight;
+
+ this.currentPageDefinition = PCLPageDefinition.getPageDefinition(
+ pagewidth, pageheight, 1000);
+
+ if (this.currentPageDefinition == null) {
+ this.currentPageDefinition = PCLPageDefinition.getDefaultPageDefinition();
+ log.warn("Paper type could not be determined. Falling back to: "
+ + this.currentPageDefinition.getName());
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("page size: " + currentPageDefinition.getPhysicalPageSize());
+ log.debug("logical page: " + currentPageDefinition.getLogicalPageRect());
+ }
+
+ if (this.currentPageDefinition.isLandscapeFormat()) {
+ gen.writeCommand("&l1O"); //Landscape Orientation
+ } else {
+ gen.writeCommand("&l0O"); //Portrait Orientation
+ }
+ gen.selectPageSize(this.currentPageDefinition.getSelector());
+
+ gen.clearHorizontalMargins();
+ gen.setTopMargin(0);
}
- gen.selectPageSize(this.currentPageDefinition.getSelector());
-
- gen.clearHorizontalMargins();
- gen.setTopMargin(0);
}
/** Saves the current graphics state on the stack. */