Sfoglia il codice sorgente

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
tags/fop-0_92-beta
Manuel Mall 18 anni fa
parent
commit
40cf61859f

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

@@ -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;

+ 16
- 4
src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java Vedi File

@@ -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

+ 0
- 7
test/layoutengine/disabled-testcases.xml Vedi File

@@ -55,13 +55,6 @@
correctly. Zero width space characters are not handled
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>

+ 19
- 6
test/layoutengine/standard-testcases/block_linefeed-treatment_2.xml Vedi File

@@ -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>&#10;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>&#10;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>

Loading…
Annulla
Salva