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