git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@358792 13f79535-47bb-0310-9956-ffa450edef68tags/fop-0_92-beta
@@ -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; |
@@ -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 |
@@ -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> |
@@ -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> |