aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Pepping <spepping@apache.org>2005-12-22 10:34:19 +0000
committerSimon Pepping <spepping@apache.org>2005-12-22 10:34:19 +0000
commiteb2dae3ff914bad79818905ed699e18124dfd5c5 (patch)
treef2ec90331b5b869f1ad864a2e750179dadd8c84e /src
parente532adfb31e3745df40a861d7b1ffc916fd4cab2 (diff)
downloadxmlgraphics-fop-eb2dae3ff914bad79818905ed699e18124dfd5c5.tar.gz
xmlgraphics-fop-eb2dae3ff914bad79818905ed699e18124dfd5c5.zip
Add a letterspace in InlineKnuthSequence
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@358552 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java47
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java34
2 files changed, 47 insertions, 34 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java b/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java
index 7872193f3..6932b7600 100644
--- a/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java
+++ b/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java
@@ -18,8 +18,12 @@
package org.apache.fop.layoutmgr;
+import java.util.LinkedList;
import java.util.List;
+import org.apache.fop.layoutmgr.inline.InlineLevelLayoutManager;
+import org.apache.fop.layoutmgr.inline.KnuthInlineBox;
+
/**
*
@@ -65,6 +69,14 @@ public class InlineKnuthSequence extends KnuthSequence {
if (!canAppendSequence(sequence)) {
return false;
}
+ // does the first element of the first paragraph add to an existing word?
+ KnuthElement lastOldElement, firstNewElement;
+ lastOldElement = getLast();
+ firstNewElement = sequence.getElement(0);
+ if (firstNewElement.isBox() && !firstNewElement.isAuxiliary()
+ && lastOldElement.isBox() && lastOldElement.getW() != 0) {
+ addALetterSpace();
+ }
addAll(sequence);
return true;
}
@@ -92,4 +104,39 @@ public class InlineKnuthSequence extends KnuthSequence {
return this;
}
+ public void addALetterSpace() {
+ KnuthBox prevBox = (KnuthBox) removeLast();
+ LinkedList oldList = new LinkedList();
+ // if there are two consecutive KnuthBoxes the
+ // first one does not represent a whole word,
+ // so it must be given one more letter space
+ if (!prevBox.isAuxiliary()) {
+ // if letter spacing is constant,
+ // only prevBox needs to be replaced;
+ oldList.add(prevBox);
+ } else {
+ // prevBox is the last element
+ // in the sub-sequence
+ // <box> <aux penalty> <aux glue> <aux box>
+ // the letter space is added to <aux glue>,
+ // while the other elements are not changed
+ oldList.add(prevBox);
+ oldList.addFirst((KnuthGlue) removeLast());
+ oldList.addFirst((KnuthPenalty) removeLast());
+ oldList.addFirst((KnuthBox) removeLast());
+ }
+ // adding a letter space could involve, according to the text
+ // represented by oldList, replacing a glue element or adding
+ // new elements
+ addAll(((InlineLevelLayoutManager)
+ prevBox.getLayoutManager())
+ .addALetterSpaceTo(oldList));
+ if (((KnuthInlineBox) prevBox).isAnchor()) {
+ // prevBox represents a footnote citation: copy footnote info
+ // from prevBox to the new box
+ KnuthInlineBox newBox = (KnuthInlineBox) getLast();
+ newBox.setFootnoteBodyLM(((KnuthInlineBox) prevBox).getFootnoteBodyLM());
+ }
+ }
+
}
diff --git a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
index c96adde02..adad62799 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
@@ -339,40 +339,6 @@ public class LineLayoutManager extends InlineStackingLayoutManager
}
}
- private void addALetterSpace() {
- KnuthBox prevBox = (KnuthBox) removeLast();
- LinkedList oldList = new LinkedList();
- // if there are two consecutive KnuthBoxes the
- // first one does not represent a whole word,
- // so it must be given one more letter space
- if (!prevBox.isAuxiliary()) {
- // if letter spacing is constant,
- // only prevBox needs to be replaced;
- oldList.add(prevBox);
- } else {
- // prevBox is the last element
- // in the sub-sequence
- // <box> <aux penalty> <aux glue> <aux box>
- // the letter space is added to <aux glue>,
- // while the other elements are not changed
- oldList.add(prevBox);
- oldList.addFirst((KnuthGlue) removeLast());
- oldList.addFirst((KnuthPenalty) removeLast());
- oldList.addFirst((KnuthBox) removeLast());
- }
- // adding a letter space could involve, according to the text
- // represented by oldList, replacing a glue element or adding
- // new elements
- addAll(((InlineLevelLayoutManager)
- prevBox.getLayoutManager())
- .addALetterSpaceTo(oldList));
- if (((KnuthInlineBox) prevBox).isAnchor()) {
- // prevBox represents a footnote citation: copy footnote info
- // from prevBox to the new box
- KnuthInlineBox newBox = (KnuthInlineBox) getLast();
- newBox.setFootnoteBodyLM(((KnuthInlineBox) prevBox).getFootnoteBodyLM());
- }
- }
}
private class LineBreakingAlgorithm extends BreakingAlgorithm {