Hi all
I have a patch fixing bugs 41019 and 41121, for both trunk and float
branch, and I'm wondering how it's best for me to proceed in order to
avoid merging problems: should I change both trunk and branch, or just one
of them?
The patch is extremely simple and does not break any testcase: I only had
to adjust the checks in a testcase because of the different line breaks.
However, it adds some three lines to the TextLM, so maybe it's better if I
wait for Simon to apply his unicode breaking changes?
I'm attaching the patches, just to let you see if they interfere with
someone else's work-in-progress.
(sorry for repeating what I wrote some time ago, but I have experienced
some e-mail problems and I probably lost some messages)
Regards
Luca
Index:
test/layoutengine/standard-testcases/block-container_content_size_percentage.xml
===================================================================
---
test/layoutengine/standard-testcases/block-container_content_size_percentage.xml
(revision 486106)
+++
test/layoutengine/standard-testcases/block-container_content_size_percentage.xml
(working copy)
@@ -61,9 +61,9 @@
<!-- from the spec: If that dimension is not specified explicitly (i.e.,
it depends on
content's blockprogression-dimension), the value is interpreted as
"auto". -->
<!-- The 10% are ignored in this case. -->
- <eval expected="28800" xpath="//flow/block[2]/@bpd"/> <!-- 2 lines -->
+ <eval expected="43200" xpath="//flow/block[2]/@bpd"/> <!-- 3 lines -->
<eval expected="100000" xpath="//flow/block[2]/@ipd"/>
- <eval expected="28800" xpath="//flow/block[2]/block[1]/block[1]/@bpd"/>
+ <eval expected="43200" xpath="//flow/block[2]/block[1]/block[1]/@bpd"/>
<eval expected="50000" xpath="//flow/block[2]/block[1]/block[1]/@ipd"/>
<!-- absolute -->
@@ -76,9 +76,11 @@
<!-- from the spec: If that dimension is not specified explicitly (i.e.,
it depends on
content's blockprogression-dimension), the value is interpreted as
"auto". -->
<!-- The 10% are ignored in this case. -->
- <eval expected="43200" xpath="//flow/block[4]/@bpd"/> <!-- 3 lines -->
+ <eval expected="57600" xpath="//flow/block[4]/@bpd"/> <!-- 4 lines -->
<eval expected="100000" xpath="//flow/block[4]/@ipd"/>
- <eval expected="43200" xpath="//flow/block[4]/block[1]/block[1]/@bpd"/>
+ <eval expected="28800" xpath="//flow/block[4]/block[1]/block[1]/@bpd"/>
<!-- the first 2 lines ... -->
<eval expected="50000" xpath="//flow/block[4]/block[1]/block[1]/@ipd"/>
+ <eval expected="28800" xpath="//flow/block[4]/block[1]/block[2]/@bpd"/>
<!-- ... and the other 2 lines -->
+ <eval expected="50000" xpath="//flow/block[4]/block[1]/block[2]/@ipd"/>
</checks>
</testcase>
Index: src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
===================================================================
--- src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
(revision 486104)
+++ src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
(working copy)
@@ -1285,7 +1285,12 @@
(new KnuthGlue(lineStartBAP, 0, 0,
new LeafPosition(this, -1), false));
} else {
+ // the first penalty is necessary in order to avoid the glue
to be a feasible break
+ // while we are ignoring hyphenated breaks
hyphenElements.add
+ (new KnuthPenalty(0, KnuthElement.INFINITE, false,
+ new LeafPosition(this, -1), false));
+ hyphenElements.add
(new KnuthGlue(0, 3 *
LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
new LeafPosition(this, -1), false));
hyphenElements.add
Index: src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java
===================================================================
--- src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java (revision
486104)
+++ src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java (working copy)
@@ -545,6 +545,17 @@
log.debug("Could not find a set of breaking points " +
threshold);
return 0;
}
+ // lastDeactivated was a "good" break, while lastTooShort and
lastTooLong
+ // were "bad" breaks since the beginning;
+ // if it is not the node we just restarted from,
lastDeactivated can
+ // replace either lastTooShort or lastTooLong
+ if (lastDeactivated != null && lastDeactivated != lastForced) {
+ if (lastDeactivated.adjustRatio > 0) {
+ lastTooShort = lastDeactivated;
+ } else {
+ lastTooLong = lastDeactivated;
+ }
+ }
if (lastTooShort == null || lastForced.position ==
lastTooShort.position) {
if (isPartOverflowRecoveryActivated()) {
if (this.lastRecovered == null) {
Index:
test/layoutengine/standard-testcases/block-container_content_size_percentage.xml
===================================================================
---
test/layoutengine/standard-testcases/block-container_content_size_percentage.xml
(revision 486106)
+++
test/layoutengine/standard-testcases/block-container_content_size_percentage.xml
(working copy)
@@ -61,9 +61,9 @@
<!-- from the spec: If that dimension is not specified explicitly (i.e.,
it depends on
content's blockprogression-dimension), the value is interpreted as
"auto". -->
<!-- The 10% are ignored in this case. -->
- <eval expected="28800" xpath="//flow/block[2]/@bpd"/> <!-- 2 lines -->
+ <eval expected="43200" xpath="//flow/block[2]/@bpd"/> <!-- 3 lines -->
<eval expected="100000" xpath="//flow/block[2]/@ipd"/>
- <eval expected="28800" xpath="//flow/block[2]/block[1]/block[1]/@bpd"/>
+ <eval expected="43200" xpath="//flow/block[2]/block[1]/block[1]/@bpd"/>
<eval expected="50000" xpath="//flow/block[2]/block[1]/block[1]/@ipd"/>
<!-- absolute -->
@@ -76,9 +76,11 @@
<!-- from the spec: If that dimension is not specified explicitly (i.e.,
it depends on
content's blockprogression-dimension), the value is interpreted as
"auto". -->
<!-- The 10% are ignored in this case. -->
- <eval expected="43200" xpath="//flow/block[4]/@bpd"/> <!-- 3 lines -->
+ <eval expected="57600" xpath="//flow/block[4]/@bpd"/> <!-- 4 lines -->
<eval expected="100000" xpath="//flow/block[4]/@ipd"/>
- <eval expected="43200" xpath="//flow/block[4]/block[1]/block[1]/@bpd"/>
+ <eval expected="28800" xpath="//flow/block[4]/block[1]/block[1]/@bpd"/>
<!-- the first 2 lines ... -->
<eval expected="50000" xpath="//flow/block[4]/block[1]/block[1]/@ipd"/>
+ <eval expected="28800" xpath="//flow/block[4]/block[1]/block[2]/@bpd"/>
<!-- ... and the other 2 lines -->
+ <eval expected="50000" xpath="//flow/block[4]/block[1]/block[2]/@ipd"/>
</checks>
</testcase>
Index: src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
===================================================================
--- src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
(revision 486106)
+++ src/java/org/apache/fop/layoutmgr/inline/TextLayoutManager.java
(working copy)
@@ -1292,7 +1292,12 @@
(new KnuthGlue(lineStartBAP, 0, 0,
new LeafPosition(this, -1), false));
} else {
+ // the first penalty is necessary in order to avoid the glue
to be a feasible break
+ // while we are ignoring hyphenated breaks
hyphenElements.add
+ (new KnuthPenalty(0, KnuthElement.INFINITE, false,
+ new LeafPosition(this, -1), false));
+ hyphenElements.add
(new KnuthGlue(0, 3 *
LineLayoutManager.DEFAULT_SPACE_WIDTH, 0,
new LeafPosition(this, -1), false));
hyphenElements.add
Index: src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java
===================================================================
--- src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java (revision
486106)
+++ src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java (working copy)
@@ -491,6 +491,17 @@
log.debug("Could not find a set of breaking points " +
threshold);
return 0;
}
+ // lastDeactivated was a "good" break, while lastTooShort and
lastTooLong
+ // were "bad" breaks since the beginning;
+ // if it is not the node we just restarted from,
lastDeactivated can
+ // replace either lastTooShort or lastTooLong
+ if (lastDeactivated != null && lastDeactivated != lastForced) {
+ if (lastDeactivated.adjustRatio > 0) {
+ lastTooShort = lastDeactivated;
+ } else {
+ lastTooLong = lastDeactivated;
+ }
+ }
if (lastTooShort == null || lastForced.position ==
lastTooShort.position) {
if (isPartOverflowRecoveryActivated()) {
if (this.lastRecovered == null) {