public boolean splitXHTMLFile() { boolean result = false; if (currentEditor.getValue().getMediaType().equals(MediaType.XHTML)) { XHTMLCodeEditor xhtmlCodeEditor = (XHTMLCodeEditor) currentEditor.getValue(); EditorPosition pos = xhtmlCodeEditor.getEditorCursorPosition(); XMLTagPair pair = xhtmlCodeEditor.findSurroundingTags( token -> { String type = token.getType(); if ("tag".equals(type)) { String content = token.getContent(); if ("head".equals(content) || "body".equals(content) || "html".equals(content)) { return true; } } return false; }); if (pair == null || "head".equals(pair.getTagName()) || "html".equals(pair.getTagName()) || StringUtils.isEmpty(pair.getTagName())) { Dialogs.create() .owner(tabPane) .title("Teilung nicht möglich") .message( "Kann Datei nicht an dieser Position teilen. Eine Teilung ist nur innerhalb des XHTML-Bodys möglich.") .showWarning(); return false; } logger.debug("umgebendes pair " + pair); // wir sind innerhalb des Body int index = xhtmlCodeEditor.getIndexFromPosition(pos); try { String originalCode = xhtmlCodeEditor.getCode(); org.jdom2.Document originalDocument = XHTMLUtils.parseXHTMLDocument(originalCode); List<Content> originalHeadContent = getOriginalHeadContent(originalDocument); byte[] frontPart = originalCode.substring(0, index).getBytes("UTF-8"); Resource oldResource = currentXHTMLResource.getValue(); oldResource.setData(frontPart); HtmlCleanerBookProcessor processor = new HtmlCleanerBookProcessor(); processor.processResource(oldResource); xhtmlCodeEditor.setCode(new String(oldResource.getData(), "UTF-8")); byte[] backPart = originalCode.substring(index, originalCode.length() - 1).getBytes("UTF-8"); String fileName = book.getNextStandardFileName(MediaType.XHTML); Resource resource = MediaType.XHTML.getResourceFactory().createResource("Text/" + fileName); byte[] backPartXHTML = XHTMLUtils.repairWithHead(backPart, originalHeadContent); resource.setData(backPartXHTML); int spineIndex = book.getSpine().getResourceIndex(oldResource); book.addSpineResource(resource, spineIndex + 1); openFileInEditor(resource, MediaType.XHTML); bookBrowserManager.refreshBookBrowser(); needsRefresh.setValue(true); needsRefresh.setValue(false); } catch (IOException | JDOMException | ResourceDataException e) { logger.error("", e); Dialogs.create() .owner(tabPane) .title("Teilung nicht möglich") .message("Kann Datei nicht teilen. Bitte Fehlermeldung an den Hersteller übermitteln.") .showException(e); } result = true; } return result; }