Refactoring ODF splitter

This commit is contained in:
Georgy Litvinov 2020-07-24 14:28:50 +02:00
parent 1f69f93a78
commit a56aa1e4bb

View file

@ -48,27 +48,18 @@ public class ODFPageSplitter {
style = ofr.getTableStyle(Misc.getAttribute(child, TABLE_STYLE_NAME));
}
} else if (nodeName.equals(TEXT_LIST)) {
if (handleList(childFirstPart, child)){
onode.insertBefore(childFirstPart, child);
}
} else if (nodeName.equals(TEXT_ALPHABETICAL_INDEX)) {
Node indexFirstPart = splitABIndex(child);
if (indexFirstPart != null) {
onode.insertBefore(indexFirstPart, child);
}
handleList(child);
} else if (nodeName.equals(TEXT_ILLUSTRATION_INDEX)) {
Node indexFirstPart = splitTextIllustrationIndex(child);
if (indexFirstPart != null) {
onode.insertBefore(indexFirstPart, child);
}
}else if (nodeName.equals(TEXT_SECTION)) {
splitTextIllustrationIndex(child);
} else if (nodeName.equals(TEXT_ALPHABETICAL_INDEX)) {
splitABIndex(child);
} else if (nodeName.equals(TEXT_SECTION)) {
Node sectionFirstPart = handleSection(child);
if (sectionFirstPart != null) {
onode.insertBefore(sectionFirstPart, child);
style = ofr.getSectionStyle(Misc.getAttribute(child, TEXT_SECTION));
}
} else if (nodeName.equals(TEXT_TABLE_OF_CONTENT)){
} else if (nodeName.equals(TEXT_TABLE_OF_CONTENT)){
//HACK
containsSPB(childFirstPart);
i++;
@ -78,7 +69,6 @@ public class ODFPageSplitter {
i++;
continue;
} else {
System.out.println("In ODFPageSplitter unknown node found. Error, exiting.");
Debug.printNode(child);
System.exit(1);
@ -107,25 +97,8 @@ public class ODFPageSplitter {
//Debug.printNode(onode);
return onode;
}
private static Node splitTextIllustrationIndex(Node illustrationIndex) {
Node illustrationIndexFirstPart = illustrationIndex.cloneNode(false);
NodeList childs = illustrationIndex.getChildNodes();
int i = 0;
while (childs.getLength() > i) {
Node child = childs.item(i);
String childName = child.getNodeName();
if (childName.equals(TEXT_ILLUSTRATION_INDEX_SOURCE)) {
illustrationIndexFirstPart.appendChild(child.cloneNode(true));
} else
if (childName.equals(TEXT_INDEX_BODY)) {
Node indexBodyFirstPart = splitTextIndexBody(child);
illustrationIndexFirstPart.appendChild(indexBodyFirstPart);
}
i++;
}
return illustrationIndexFirstPart;
}
private static Node splitABIndex(Node abIndex) {
private static void splitABIndex(Node abIndex) {
Node parent = abIndex.getParentNode();
Node abIndexFirstPart = abIndex.cloneNode(false);
NodeList childs = abIndex.getChildNodes();
int i = 0;
@ -141,8 +114,33 @@ public class ODFPageSplitter {
}
i++;
}
return abIndexFirstPart;
if (abIndexFirstPart != null) {
parent.insertBefore(abIndexFirstPart, abIndex);
}
}
private static void splitTextIllustrationIndex(Node illustrationIndex) {
Node parent = illustrationIndex.getParentNode();
Node illustrationIndexFirstPart = illustrationIndex.cloneNode(false);
NodeList childs = illustrationIndex.getChildNodes();
int i = 0;
while (childs.getLength() > i) {
Node child = childs.item(i);
String childName = child.getNodeName();
if (childName.equals(TEXT_ILLUSTRATION_INDEX_SOURCE)) {
illustrationIndexFirstPart.appendChild(child.cloneNode(true));
} else
if (childName.equals(TEXT_INDEX_BODY)) {
Node indexBodyFirstPart = splitTextIndexBody(child);
illustrationIndexFirstPart.appendChild(indexBodyFirstPart);
}
i++;
}
if (illustrationIndexFirstPart != null) {
parent.insertBefore(illustrationIndexFirstPart, illustrationIndex);
}
}
private static Node splitTextIndexBody(Node indexBody) {
Node indexBodyFirstPart = indexBody.cloneNode(false);
NodeList childs = indexBody.getChildNodes();
@ -168,8 +166,9 @@ public class ODFPageSplitter {
}
return indexBodyFirstPart;
}
private static boolean handleList(Node listFirstPart, Node list){
private static boolean handleList(Node list){
Node parent = list.getParentNode();
Node listFirstPart = list.cloneNode(false);
NodeList listNodes = list.getChildNodes();
int i = 0;
boolean dataMoved = false;
@ -225,6 +224,10 @@ public class ODFPageSplitter {
}
}
}
if (dataMoved) {
parent.insertBefore(listFirstPart, list);
}
return dataMoved;
}
//If SPB before first item - return false, remove SPB
@ -245,8 +248,7 @@ public class ODFPageSplitter {
//Remove SPB.Return result
listItem.removeChild(listItemChild);
} else if (nodeName.equals(TEXT_LIST)) {
if (handleList(listItemChildFirstPart, listItemChild)){
listItemFirstPart.appendChild(listItemChildFirstPart);
if (handleList(listItemChild)){
dataMoved=true;
}
@ -520,11 +522,10 @@ public class ODFPageSplitter {
dataMoved=true;
}
} else if (nodeName.equals(TEXT_LIST)) {
Node listFirstPart = cellChildNode.cloneNode(false);
if (handleList(listFirstPart, cellChildNode)){
cellFirstPart.appendChild(listFirstPart);
dataMoved=true;
}
Node listFirstPart = cellChildNode.cloneNode(false);
if (handleList(cellChildNode)){
dataMoved=true;
}
}
break;
} else {
@ -583,8 +584,7 @@ public class ODFPageSplitter {
dataMoved=true;
}
} else if (nodeName.equals(TEXT_LIST)) {
if (handleList(childFirstPart, child)){
sectionFirstPart.appendChild(childFirstPart);
if (handleList(child)){
dataMoved=true;
}
}