Browse Source

Merge from Trunk:

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/branches/fop-0_91@358800 13f79535-47bb-0310-9956-ffa450edef68
tags/fop-0_91-beta
Jeremias Maerki 18 years ago
parent
commit
18ff5d527c

+ 1
- 1
src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java View File

@@ -442,7 +442,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;

+ 15
- 2
src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java View File

@@ -367,6 +367,19 @@ public class LineLayoutManager extends InlineStackingLayoutManager
newBox.setFootnoteBodyLM(((KnuthInlineBox) prevBox).getFootnoteBodyLM());
}
}

/**
* @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 {
@@ -812,9 +825,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));

+ 4
- 0
status.xml View File

@@ -34,6 +34,10 @@
output format have been removed in favor or the constructors that use
MIME types.
</action>
<action context="Code" dev="MM" type="fix">
Fixed a bug where the linefeed-treatment property value "preserve" was not
honoured when used in conjunction with text-align="center".
</action>
<action context="Code" dev="JM" type="fix" fixes-bug="37964">
Bugfix: hard breaks with even-page or odd-page were not handled correctly
when spaces were surrounding the break.

+ 98
- 0
test/layoutengine/standard-testcases/block_linefeed-treatment_2.xml View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2005 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 linefeed preservation between and at the start
of fo:inline elements.
</p>
</info>
<fo>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="master"
page-height="845pt"
page-width="598pt">
<fo:region-body margin-left="50pt"
margin-top="50pt"
margin-bottom="50pt"
margin-right="50pt"/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="master">
<fo:flow flow-name="xsl-region-body">
<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 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>&#10;Contrat Nr.: W-113283...</fo:inline>
</fo:block>
<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 background-color="yellow"
linefeed-treatment="preserve"
margin-top="10pt" margin-bottom="10pt">
<fo:inline font-weight="bold">Leasing a ...</fo:inline>
<fo:inline>&#10;Contrat Nr.: W-113283...</fo:inline>
</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<!--
The result:

Leasing a ...
Contract Nr.: W-...

Leasing a ...
Contract Nr.: W-...

Leasing a ...
Contract Nr.: W-...

Leasing a ...

Contract Nr.: W-...

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="4" xpath="count(//flow/block[1]/lineArea)"/>
<eval expected="4" xpath="count(//flow/block[2]/lineArea)"/>
<eval expected="4" xpath="count(//flow/block[3]/lineArea)"/>
<eval expected="4" xpath="count(//flow/block[4]/lineArea)"/>
</checks>
</testcase>

Loading…
Cancel
Save