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 2006/05/19 17:10:44 UTC

svn commit: r407819 - in /xmlgraphics/fop/trunk: src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java test/layoutengine/standard-testcases/inline_letter-spacing_3.xml

Author: spepping
Date: Fri May 19 08:10:44 2006
New Revision: 407819

URL: http://svn.apache.org/viewvc?rev=407819&view=rev
Log:
An emergency patch to avoid that a non-breaking space at the end of an
fo:inline with padding, followed by another fo:inline, while
text-align is justify, does not cause a NullPointerException due to
InlineStackingLayoutManager.addALetterSpaceTo(). Patch submitted by
Max Berger <ma...@berger.name>, applied with some modifications. This
patch solves bug 39571.

Added:
    xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_3.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/InlineStackingLayoutManager.java

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/InlineKnuthSequence.java?rev=407819&r1=407818&r2=407819&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 Fri May 19 08:10:44 2006
@@ -140,7 +140,9 @@
         addAll(((InlineLevelLayoutManager)
                      prevBox.getLayoutManager())
                     .addALetterSpaceTo(oldList));
-        if (((KnuthInlineBox) prevBox).isAnchor()) {
+        // prevBox may not be a KnuthInlineBox;
+        // this may happen if it is a padding box; see bug 39571.
+        if ( prevBox instanceof KnuthInlineBox && ((KnuthInlineBox) prevBox).isAnchor()) {
             // prevBox represents a footnote citation: copy footnote info
             // from prevBox to the new box
             KnuthInlineBox newBox = (KnuthInlineBox) getLast();

Modified: xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java?rev=407819&r1=407818&r2=407819&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java (original)
+++ xmlgraphics/fop/trunk/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java Fri May 19 08:10:44 2006
@@ -292,9 +292,13 @@
             element.setPosition(((NonLeafPosition)element.getPosition()).getPosition());
         }
 
-        oldList = ((InlineLevelLayoutManager)
-                   element.getLayoutManager()).addALetterSpaceTo(oldList);
-
+        // The last element may not have a layout manager (its position == null);
+        // this may happen if it is a padding box; see bug 39571.
+        InlineLevelLayoutManager LM = 
+            (InlineLevelLayoutManager) element.getLayoutManager();
+        if (LM != null) {
+            oldList = LM.addALetterSpaceTo(oldList);
+        }
         // "wrap" again the Position stored in each element of oldList
         oldListIterator = oldList.listIterator();
         while (oldListIterator.hasNext()) {

Added: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_3.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_3.xml?rev=407819&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_3.xml (added)
+++ xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_3.xml Fri May 19 08:10:44 2006
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Copyright 2006 The Apache Software Foundation
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!-- $Id$ -->
+<testcase>
+  <info>
+    <p>
+      This test checks that a non-breaking space at the end of an
+      fo:inline with padding, followed by another fo:inline, while
+      text-align is justify, does not cause a NullPointerException due
+      to InlineStackingLayoutManager.addALetterSpaceTo().
+    </p>
+    <p>http://issues.apache.org/bugzilla/show_bug.cgi?id=39571</p>
+  </info>
+  <fo>
+    <fo:root
+      xmlns:fo="http://www.w3.org/1999/XSL/Format">
+      <fo:layout-master-set>
+        <fo:simple-page-master master-name="small"
+          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="small">
+        <fo:flow flow-name="xsl-region-body" text-align="justify">
+          <fo:block language="en" country="US">
+            <fo:inline><fo:inline padding-end="1em">non-breaking&#xA0;</fo:inline><fo:inline>space</fo:inline></fo:inline>
+          </fo:block>
+        </fo:flow>
+      </fo:page-sequence>
+    </fo:root>
+  </fo>
+  <checks>
+    <eval expected="105384"
+xpath="//flow/block[1]/lineArea[1]/inlineparent[1]/@ipd" desc="IPD of
+containing inline area"/>
+    <eval expected="73368"
+xpath="//flow/block[1]/lineArea[1]/inlineparent[1]/inlineparent[1]/@ipd"
+desc="IPD of first contained inline area"/>
+    <eval expected="73368"
+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_3.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/layoutengine/standard-testcases/inline_letter-spacing_3.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