diff options
author | Manuel Mall <manuel@apache.org> | 2005-12-23 11:27:07 +0000 |
---|---|---|
committer | Manuel Mall <manuel@apache.org> | 2005-12-23 11:27:07 +0000 |
commit | 40cf61859f22923df0877a930a55627cb4af2066 (patch) | |
tree | fbdb90a9b949e2b09fd7adb0a3b6475fdf6cdf80 | |
parent | 605c5f7be6a2f41a56a5f86667f25deb6b1de9ae (diff) | |
download | xmlgraphics-fop-40cf61859f22923df0877a930a55627cb4af2066.tar.gz xmlgraphics-fop-40cf61859f22923df0877a930a55627cb4af2066.zip |
Fixed problem with linefeed-treatment=preserve not being correctly handled for text-align=center
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@358792 13f79535-47bb-0310-9956-ffa450edef68
4 files changed, 36 insertions, 18 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java index 8b0f54256..5650c3e80 100755 --- a/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java @@ -362,7 +362,7 @@ public class InlineLayoutManager extends InlineStackingLayoutManager { LayoutManager lastLM = null; // last child LM in this iterator while (parentIter.hasNext()) { pos = (NonLeafPosition) parentIter.next(); - if (pos.getPosition() != null) { + if (pos != null && pos.getPosition() != null) { positionList.add(pos.getPosition()); lastLM = pos.getPosition().getLM(); lastPos = pos; diff --git a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java index adad62799..5c927b470 100644 --- a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java +++ b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java @@ -338,7 +338,19 @@ public class LineLayoutManager extends InlineStackingLayoutManager inlineLM.removeWordSpace(removedElements); } } - + + /** + * @return true if the sequence contains a box + */ + public boolean containsBox() { + for (int i = 0; i < this.size(); i++) { + KnuthElement el = (KnuthElement)this.get(i); + if (el.isBox()) { + return true; + } + } + return false; + } } private class LineBreakingAlgorithm extends BreakingAlgorithm { @@ -756,9 +768,9 @@ public class LineLayoutManager extends InlineStackingLayoutManager == -KnuthPenalty.INFINITE) { // a penalty item whose value is -inf // represents a preserved linefeed, - // wich forces a line break + // which forces a line break lastPar.removeLast(); - if (lastPar.size() == 0) { + if (!lastPar.containsBox()) { //only a forced linefeed on this line //-> compensate with a zero width box lastPar.add(new KnuthInlineBox(0, null, null, false)); @@ -798,7 +810,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager } log.trace(trace); } - + /** * Find a set of breaking points. * This method is called only once by getNextBreakPoss, and it diff --git a/test/layoutengine/disabled-testcases.xml b/test/layoutengine/disabled-testcases.xml index 6504e6962..43c347998 100755 --- a/test/layoutengine/disabled-testcases.xml +++ b/test/layoutengine/disabled-testcases.xml @@ -56,13 +56,6 @@ correctly.</description> </testcase> <testcase> - <name>linefeed treatment 2</name> - <file>block_linefeed-treatment_2.xml</file> - <description>This test checks linefeed preservation between and at - the start of fo:inline elements.</description> - <reference>http://marc.theaimsgroup.com/?t=113525808000001</reference> - </testcase> - <testcase> <name>Empty blocks produce fences</name> <file>block_space-before_space-after_8.xml</file> <description>An empty block currently produces a fence for diff --git a/test/layoutengine/standard-testcases/block_linefeed-treatment_2.xml b/test/layoutengine/standard-testcases/block_linefeed-treatment_2.xml index 016c27b2b..bb9587ec5 100644 --- a/test/layoutengine/standard-testcases/block_linefeed-treatment_2.xml +++ b/test/layoutengine/standard-testcases/block_linefeed-treatment_2.xml @@ -36,19 +36,29 @@ of fo:inline elements. </fo:layout-master-set> <fo:page-sequence master-reference="master"> <fo:flow flow-name="xsl-region-body"> - <fo:block linefeed-treatment="preserve" text-align="center"> + <fo:block background-color="silver" + linefeed-treatment="preserve" text-align="center" + margin-top="10pt" margin-bottom="10pt"> <fo:inline font-weight="bold">Leasing a ...</fo:inline> + <fo:inline>Contrat Nr.: W-113283...</fo:inline> </fo:block> - <fo:block linefeed-treatment="preserve" text-align="center"> + <fo:block background-color="yellow" + linefeed-treatment="preserve" text-align="center" + margin-top="10pt" margin-bottom="10pt"> <fo:inline font-weight="bold">Leasing a ...</fo:inline> <fo:inline> Contrat Nr.: W-113283...</fo:inline> </fo:block> - <fo:block linefeed-treatment="preserve"> + <fo:block background-color="silver" + linefeed-treatment="preserve" + margin-top="10pt" margin-bottom="10pt"> <fo:inline font-weight="bold">Leasing a ...</fo:inline> + <fo:inline>Contrat Nr.: W-113283...</fo:inline> </fo:block> - <fo:block linefeed-treatment="preserve"> + <fo:block background-color="yellow" + linefeed-treatment="preserve" + margin-top="10pt" margin-bottom="10pt"> <fo:inline font-weight="bold">Leasing a ...</fo:inline> <fo:inline> Contrat Nr.: W-113283...</fo:inline> </fo:block> @@ -61,12 +71,15 @@ of fo:inline elements. The result: Leasing a ... + Contract Nr.: W-... Leasing a ... + Contract Nr.: W-... Leasing a ... + Contract Nr.: W-... Leasing a ... @@ -77,9 +90,9 @@ The result for the second case is lacking the linefeed at the start of the fo:inline. The results for the first and second cases are lacking the linefeed before the first line. --> - <eval expected="3" xpath="count(//flow/block[1]/lineArea)"/> + <eval expected="4" xpath="count(//flow/block[1]/lineArea)"/> <eval expected="4" xpath="count(//flow/block[2]/lineArea)"/> - <eval expected="3" xpath="count(//flow/block[3]/lineArea)"/> + <eval expected="4" xpath="count(//flow/block[3]/lineArea)"/> <eval expected="4" xpath="count(//flow/block[4]/lineArea)"/> </checks> </testcase> |