From 001fbd2acc5ccadea987ff78fc90cd30ad8556f4 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Fri, 12 Feb 2021 23:10:24 +0100 Subject: [PATCH] Move first part of list in section splitting to section first part and remove SPB inserted in list splitter. Previous behaviour led to wrong pagination. --- .../w2phtml/pageSplitters/ListSplitter.java | 3 ++- .../pageSplitters/SectionSplitter.java | 10 ++++++-- .../w2phtml/pageSplitters/SplitResults.java | 25 +++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/main/java/w2phtml/pageSplitters/ListSplitter.java b/src/main/java/w2phtml/pageSplitters/ListSplitter.java index b0f011b..1e77336 100644 --- a/src/main/java/w2phtml/pageSplitters/ListSplitter.java +++ b/src/main/java/w2phtml/pageSplitters/ListSplitter.java @@ -32,7 +32,7 @@ public class ListSplitter extends BasicSplitter implements ISplitter { Element softPageBreak = document.createElement(TEXT_SOFT_PAGE_BREAK); Node nextPageItemPart = null; int i = 0; - SplitResults results = new SplitResults(false); + SplitResults results = new SplitResults(false,listFirstPart); while (listNodes.getLength() > i) { Node child = listNodes.item(i); if (child.getNodeType() == Node.ELEMENT_NODE) { @@ -79,6 +79,7 @@ public class ListSplitter extends BasicSplitter implements ISplitter { ((Element) list).setAttribute(TEXT_CONTINUE_NUMBERING, "true"); parent.insertBefore(listFirstPart, list); parent.insertBefore(softPageBreak, list); + results.setSPB(softPageBreak); // System.out.println("LIST FIRST PART"); // Debug.printNode(listFirstPart); // TODO: Create dummy list style to override list item to not teleport diff --git a/src/main/java/w2phtml/pageSplitters/SectionSplitter.java b/src/main/java/w2phtml/pageSplitters/SectionSplitter.java index 842b2bc..36a7e5d 100644 --- a/src/main/java/w2phtml/pageSplitters/SectionSplitter.java +++ b/src/main/java/w2phtml/pageSplitters/SectionSplitter.java @@ -62,8 +62,14 @@ public class SectionSplitter extends BasicSplitter implements ISplitter { results.setDataMoved(true); } } else if (nodeName.equals(TEXT_LIST)) { - if (factory.split(child).isDataMoved()){ - results.setDataMoved(true); + SplitResults listSplitResults = factory.split(child); + if (listSplitResults.isDataMoved()){ + results.setDataMoved(true); + sectionFirstPart.appendChild(listSplitResults.getFirstPart()); + Node textListSpb = listSplitResults.getSPB(); + if (textListSpb != null) { + textListSpb.getParentNode().removeChild(textListSpb); + } } } else { System.out.println("Error. SPB in Section child node " + nodeName); diff --git a/src/main/java/w2phtml/pageSplitters/SplitResults.java b/src/main/java/w2phtml/pageSplitters/SplitResults.java index 1146004..479ab21 100644 --- a/src/main/java/w2phtml/pageSplitters/SplitResults.java +++ b/src/main/java/w2phtml/pageSplitters/SplitResults.java @@ -1,13 +1,23 @@ package w2phtml.pageSplitters; +import org.w3c.dom.Node; + public class SplitResults { private boolean dataMoved; + private Node firstPart; + private Node SPB; public SplitResults(boolean dataMoved) { this.setDataMoved(dataMoved); + this.firstPart = null; } + public SplitResults(boolean dataMoved, Node firstPart) { + this.setDataMoved(dataMoved); + this.firstPart = firstPart; + } + public boolean isDataMoved() { return dataMoved; @@ -16,4 +26,19 @@ public class SplitResults { public void setDataMoved(boolean dataMoved) { this.dataMoved = dataMoved; } + + public Node getFirstPart() { + return firstPart; + } + + public void setFirstPart(Node firstPart) { + this.firstPart = firstPart; + } + public Node getSPB() { + return SPB; + } + public void setSPB(Node sPB) { + SPB = sPB; + } + }