Browse Source

Fixed removeNode() as discussed on fop-dev. No more checks for footnotes and removal of nodes even if they are not in the normally expected order.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@421600 13f79535-47bb-0310-9956-ffa450edef68
pull/25/head
Jeremias Maerki 18 years ago
parent
commit
0ca8dbd603

+ 14
- 4
src/java/org/apache/fop/layoutmgr/BreakingAlgorithm.java View File

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

+ 0
- 29
src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java View File

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

Loading…
Cancel
Save