From 6d14ebecaa426319ea4bf92cd52aab46c2354fe8 Mon Sep 17 00:00:00 2001 From: Georgy Litvinov Date: Fri, 24 Jul 2020 20:27:36 +0200 Subject: [PATCH] Removed list splitting hack. --- .../java/w2phtml/xhtml/ODFPageSplitter.java | 50 +++++++++---------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/src/main/java/w2phtml/xhtml/ODFPageSplitter.java b/src/main/java/w2phtml/xhtml/ODFPageSplitter.java index fb01536..99d2fd8 100644 --- a/src/main/java/w2phtml/xhtml/ODFPageSplitter.java +++ b/src/main/java/w2phtml/xhtml/ODFPageSplitter.java @@ -13,7 +13,7 @@ import w2phtml.office.StyleWithProperties; import w2phtml.util.Misc; public class ODFPageSplitter { - static Node truncatedListItemNodeContent = null; + //static Node truncatedListItemNodeContent = null; static OfficeReader officeReader = null; public static void splitOfficeText(Node onode, OfficeReader ofr) { @@ -75,16 +75,9 @@ public class ODFPageSplitter { } if (style == null || !"page".equals(style.getProperty(FO_BREAK_BEFORE))){ - onode.insertBefore(softPageBreak.cloneNode(false), child); - } - //HACK! - if (truncatedListItemNodeContent != null){ - NodeList itemNodeList= truncatedListItemNodeContent.getChildNodes(); - while (itemNodeList.getLength() > 0){ - onode.insertBefore(itemNodeList.item(0), child); + if (!nodeName.equals(TEXT_LIST)) { + onode.insertBefore(softPageBreak.cloneNode(false), child); } - truncatedListItemNodeContent.getParentNode().removeChild(truncatedListItemNodeContent); - truncatedListItemNodeContent = null; } if (!child.hasChildNodes()){ onode.removeChild(child); @@ -179,6 +172,9 @@ public class ODFPageSplitter { Node parent = list.getParentNode(); Node listFirstPart = list.cloneNode(false); NodeList listNodes = list.getChildNodes(); + Document document = list.getOwnerDocument(); + Element softPageBreak = document.createElement(TEXT_SOFT_PAGE_BREAK); + Node hangingItem = null; int i = 0; boolean dataMoved = false; while (listNodes.getLength() > i) { @@ -195,8 +191,6 @@ public class ODFPageSplitter { listFirstPart.appendChild(child.cloneNode(true)); //Get next element i++; - - } else if (nodeName.equals(TEXT_LIST_ITEM)) { if (containsSPB(child)){ @@ -205,13 +199,9 @@ public class ODFPageSplitter { dataMoved = true; //Add first part of list item to previous list item listFirstPart.appendChild(child.getPreviousSibling()); - //Get list parent node and move cutted node - //After First Part and SPB but before this list; - //TODO!!!!!!!!!! - truncatedListItemNodeContent = child; - listFirstPart.getParentNode(); - //If List item is empty - remove it - if (!child.hasChildNodes()){ + if (child.hasChildNodes()){ + hangingItem = child; + } else { list.removeChild(child); } } @@ -224,18 +214,26 @@ public class ODFPageSplitter { // Not with SPB yet, move node, set dataMoved=true listFirstPart.appendChild(child); dataMoved = true; - } - } else { System.out.println("Error. SPB in List child node " + nodeName); System.exit(1); } - } } if (dataMoved) { parent.insertBefore(listFirstPart, list); + parent.insertBefore(softPageBreak, list); + if (hangingItem != null) { + i = 0; + NodeList freeNodes = hangingItem.getChildNodes(); + while (freeNodes.getLength() > 0 ) { + Node freeNode = freeNodes.item(i); + parent.insertBefore(freeNode, list); + } + list.removeChild(hangingItem); + } + } return dataMoved; @@ -267,10 +265,10 @@ public class ODFPageSplitter { if (handleParagraph(listItemChild)){ listItemFirstPart.appendChild(listItemChild.getPreviousSibling()); dataMoved=true; - } else { - System.out.println("Error. SPB in List item child node " + nodeName); - System.exit(1); - } + } + } else { + System.out.println("Error. SPB in List item child node " + nodeName); + System.exit(1); } break; //Move to first part