You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by sp...@apache.org on 2005/12/22 11:34:26 UTC
svn commit: r358552 - in /xmlgraphics/fop/trunk:
src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java
src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
test/layoutengine/standard-testcases/inline_letter-spacing_2.xml
Author: spepping
Date: Thu Dec 22 02:34:19 2005
New Revision: 358552
URL: http://svn.apache.org/viewcvs?rev=358552&view=rev
Log:
Add a letterspace in InlineKnuthSequence
Added:
xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_2.xml (with props)
Modified:
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java
xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java?rev=358552&r1=358551&r2=358552&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java Thu Dec 22 02:34:19 2005
@@ -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 @@
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;
}
@@ -90,6 +102,41 @@
isClosed = true;
}
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());
+ }
}
}
Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java?rev=358552&r1=358551&r2=358552&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java Thu Dec 22 02:34:19 2005
@@ -339,40 +339,6 @@
}
}
- 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 {
Added: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_2.xml
URL: http://svn.apache.org/viewcvs/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_2.xml?rev=358552&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_2.xml (added)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_2.xml Thu Dec 22 02:34:19 2005
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<testcase>
+ <info>
+ <p>
+ This test checks whether letterspacing is applied between across
+ fo:inline elements in the same word.
+ </p>
+ </info>
+ <fo>
+ <fo:root
+ xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="simpleA4"
+ page-height="5cm" page-width="15cm"
+ margin-top="2cm" margin-bottom="2cm"
+ margin-left="2cm" margin-right="2cm">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+
+ <fo:page-sequence master-reference="simpleA4">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block language="en" country="US">
+ <fo:inline letter-spacing="2pt"><fo:inline>nor</fo:inline><fo:inline>mal</fo:inline></fo:inline>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="46672"
+xpath="//flow/block[1]/lineArea[1]/inlineparent[1]/@ipd" desc="IPD of
+containing inline area"/>
+ <eval expected="23340"
+xpath="//flow/block[1]/lineArea[1]/inlineparent[1]/inlineparent[1]/@ipd"
+desc="IPD of first contained inline area"/>
+ <eval expected="23340"
+xpath="//flow/block[1]/lineArea[1]/inlineparent[1]/inlineparent[1]/text/@ipd"
+desc="IPD of corresponding text area"/>
+ </checks>
+</testcase>
Propchange: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_2.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_2.xml
------------------------------------------------------------------------------
svn:keywords = Id
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org