aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremias Maerki <jeremias@apache.org>2005-11-30 08:52:26 +0000
committerJeremias Maerki <jeremias@apache.org>2005-11-30 08:52:26 +0000
commit725e1eb9093f64f56ed9daf147e379c75fc9a00d (patch)
tree570fd108ef8500ad6c3442705933acb96df6e87d
parent91c26122bb60a107168b19f5b1b6d0d89bc71f65 (diff)
downloadxmlgraphics-fop-725e1eb9093f64f56ed9daf147e379c75fc9a00d.tar.gz
xmlgraphics-fop-725e1eb9093f64f56ed9daf147e379c75fc9a00d.zip
Bugfix: Added missing conditionality notification for table-cell content.
Extracted functionality to find a previous break into a helper method in ElementListUtils. Fixed misguided german->english translation on parameter names (last != previous). git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@349909 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/fop/layoutmgr/ElementListUtils.java19
-rw-r--r--src/java/org/apache/fop/layoutmgr/SpaceResolver.java8
-rw-r--r--src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java29
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java4
-rw-r--r--status.xml13
5 files changed, 47 insertions, 26 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/ElementListUtils.java b/src/java/org/apache/fop/layoutmgr/ElementListUtils.java
index c4fd42a35..e68698e57 100644
--- a/src/java/org/apache/fop/layoutmgr/ElementListUtils.java
+++ b/src/java/org/apache/fop/layoutmgr/ElementListUtils.java
@@ -146,4 +146,23 @@ public class ElementListUtils {
return last.isForcedBreak();
}
+ /**
+ * Determines the position of the previous break before the start index on an
+ * element list.
+ * @param elems the element list
+ * @param startIndex the start index
+ * @return the position of the previous break, or -1 if there was no previous break
+ */
+ public static int determinePreviousBreak(List elems, int startIndex) {
+ int prevBreak = startIndex - 1;
+ while (prevBreak >= 0) {
+ KnuthElement el = (KnuthElement)elems.get(prevBreak);
+ if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
+ break;
+ }
+ prevBreak--;
+ }
+ return prevBreak;
+ }
+
}
diff --git a/src/java/org/apache/fop/layoutmgr/SpaceResolver.java b/src/java/org/apache/fop/layoutmgr/SpaceResolver.java
index 45e9990ea..583f8ffaa 100644
--- a/src/java/org/apache/fop/layoutmgr/SpaceResolver.java
+++ b/src/java/org/apache/fop/layoutmgr/SpaceResolver.java
@@ -692,14 +692,14 @@ public class SpaceResolver {
* @param effectiveList the effective element list
* @param startElementIndex index of the first element in the part to be processed
* @param endElementIndex index of the last element in the part to be processed
- * @param lastBreak index of the the break possibility just before this part (used to
+ * @param prevBreak index of the the break possibility just before this part (used to
* identify a break condition, lastBreak <= 0 represents a no-break condition)
*/
public static void performConditionalsNotification(List effectiveList,
- int startElementIndex, int endElementIndex, int lastBreak) {
+ int startElementIndex, int endElementIndex, int prevBreak) {
KnuthElement el = null;
- if (lastBreak > 0) {
- el = (KnuthElement)effectiveList.get(lastBreak);
+ if (prevBreak > 0) {
+ el = (KnuthElement)effectiveList.get(prevBreak);
}
SpaceResolver.SpaceHandlingBreakPosition beforeBreak = null;
SpaceResolver.SpaceHandlingBreakPosition afterBreak = null;
diff --git a/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java b/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
index 5a98deac6..0ed202c6f 100644
--- a/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
@@ -461,30 +461,15 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
int bodyFirstIndex = ((ListItemPosition) positionList.getFirst()).getBodyFirstIndex();
int bodyLastIndex = ((ListItemPosition) positionList.getLast()).getBodyLastIndex();
- int lastBreak;
- //Determine last break if any
- lastBreak = labelFirstIndex - 1;
- while (lastBreak >= 0) {
- KnuthElement el = (KnuthElement)labelList.get(lastBreak);
- if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
- break;
- }
- lastBreak--;
- }
+ //Determine previous break if any
+ int previousBreak = ElementListUtils.determinePreviousBreak(labelList, labelFirstIndex);
SpaceResolver.performConditionalsNotification(labelList,
- labelFirstIndex, labelLastIndex, lastBreak);
-
- //Determine last break if any
- lastBreak = bodyFirstIndex - 1;
- while (lastBreak >= 0) {
- KnuthElement el = (KnuthElement)bodyList.get(lastBreak);
- if (el.isPenalty() && el.getP() < KnuthElement.INFINITE) {
- break;
- }
- lastBreak--;
- }
+ labelFirstIndex, labelLastIndex, previousBreak);
+
+ //Determine previous break if any
+ previousBreak = ElementListUtils.determinePreviousBreak(labelList, labelFirstIndex);
SpaceResolver.performConditionalsNotification(bodyList,
- bodyFirstIndex, bodyLastIndex, lastBreak);
+ bodyFirstIndex, bodyLastIndex, previousBreak);
// add label areas
if (labelFirstIndex <= labelLastIndex) {
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
index 99028d915..9fabeccc5 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
@@ -49,6 +49,7 @@ import org.apache.fop.layoutmgr.ListElement;
import org.apache.fop.layoutmgr.MinOptMaxUtil;
import org.apache.fop.layoutmgr.Position;
import org.apache.fop.layoutmgr.PositionIterator;
+import org.apache.fop.layoutmgr.SpaceResolver;
import org.apache.fop.layoutmgr.TraitSetter;
import org.apache.fop.layoutmgr.SpaceResolver.SpaceHandlingBreakPosition;
import org.apache.fop.traits.MinOptMax;
@@ -948,6 +949,9 @@ public class TableContentLayoutManager implements PercentBaseContext {
cellLM.setContentHeight(contentHeight);
cellLM.setRowHeight(effCellHeight);
//cellLM.setRowHeight(row.getHeight().opt);
+ int prevBreak = ElementListUtils.determinePreviousBreak(pgu.getElements(), startPos);
+ SpaceResolver.performConditionalsNotification(pgu.getElements(),
+ startPos, endPos, prevBreak);
cellLM.addAreas(new KnuthPossPosIter(pgu.getElements(),
startPos, endPos + 1), layoutContext);
}
diff --git a/status.xml b/status.xml
index 20e120e6a..a6a1e7334 100644
--- a/status.xml
+++ b/status.xml
@@ -28,6 +28,19 @@
<changes>
<release version="FOP Trunk">
<action context="Code" dev="JM" type="fix">
+ Bugfix: Space resolution was incomplete for content in table-cells. Conditional elements
+ didn't get removed.
+ </action>
+ <action contexn="Code" dev="JM" type="fix">
+ The validation check for non-zero borders and padding on a region-* is now turned off
+ when relaxed validation is active to improve compatibility with FO documents written
+ for other FO implementations.
+ </action>
+ <action context="Code" dev="JM" type="fix">
+ Bugfix for "/ by zero" ArithmeticExceptions when an URL to a non-existing image is used
+ and content-width and/or content-height is used.
+ </action>
+ <action context="Code" dev="JM" type="fix">
Bugfix for a multi-threading problem:
propertyListTable initialization moved from the constructor to a static block in FONode.
This fixes NullPointerExceptions in PropertyList.