diff options
Diffstat (limited to 'src/java/org')
-rw-r--r-- | src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java | 18 | ||||
-rw-r--r-- | src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java | 29 |
2 files changed, 14 insertions, 33 deletions
diff --git a/src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java b/src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java index 1ad7db986..a0f58db13 100644 --- a/src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java +++ b/src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java @@ -1010,19 +1010,29 @@ public abstract class BreakingAlgorithm { } /** - * Remove the first active node registered for the given line. If there is no more active node + * Remove the given active node registered for the given line. If there are no more active nodes * for this line, adjust the startLine accordingly. * @param line number of the line ending at the node's corresponding breakpoint * @param node the node to deactivate */ protected void removeNode(int line, KnuthNode node) { + int headIdx = line * 2; KnuthNode n = getNode(line); if (n != node) { - log.error("Should be first"); + // nodes could be rightly deactivated in a different order + KnuthNode prevNode = null; + while (n != node) { + prevNode = n; + n = n.next; + } + prevNode.next = n.next; + if (prevNode.next == null) { + activeLines[headIdx + 1] = prevNode; + } } else { - activeLines[line * 2] = node.next; + activeLines[headIdx] = node.next; if (node.next == null) { - activeLines[line * 2 + 1] = null; + activeLines[headIdx + 1] = null; } while (startLine < endLine && getNode(startLine) == null) { startLine++; diff --git a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java index 2be63eb7f..acf46ef64 100644 --- a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java +++ b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java @@ -713,35 +713,6 @@ class PageBreakingAlgorithm extends BreakingAlgorithm { removeNode(prevNode.line, prevNode); } - protected void removeNode(int line, KnuthNode node) { - KnuthNode n = getNode(line); - if (n != node) { - if (footnotesPending) { - // nodes could be rightly deactivated in a different order - KnuthNode prevNode = null; - while (n != node) { - prevNode = n; - n = n.next; - } - prevNode.next = n.next; - if (prevNode.next == null) { - activeLines[line * 2 + 1] = prevNode; - } - } else { - log.error("Should be first"); - } - } else { - activeLines[line * 2] = node.next; - if (node.next == null) { - activeLines[line * 2 + 1] = null; - } - while (startLine < endLine && getNode(startLine) == null) { - startLine++; - } - } - activeNodeCount--; - } - /** * @return a list of PageBreakPosition elements */ |