diff options
author | Simon Pepping <spepping@apache.org> | 2005-12-22 10:34:19 +0000 |
---|---|---|
committer | Simon Pepping <spepping@apache.org> | 2005-12-22 10:34:19 +0000 |
commit | eb2dae3ff914bad79818905ed699e18124dfd5c5 (patch) | |
tree | f2ec90331b5b869f1ad864a2e750179dadd8c84e /src | |
parent | e532adfb31e3745df40a861d7b1ffc916fd4cab2 (diff) | |
download | xmlgraphics-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.java | 47 | ||||
-rw-r--r-- | src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java | 34 |
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 { |