diff --git a/src/main/java/writer2latex/xhtml/content/Separator.java b/src/main/java/writer2latex/xhtml/content/Separator.java
index 6963d85..f0e4750 100644
--- a/src/main/java/writer2latex/xhtml/content/Separator.java
+++ b/src/main/java/writer2latex/xhtml/content/Separator.java
@@ -81,7 +81,7 @@ public class Separator {
headerStack.offerFirst(Integer.parseInt(sLevel));
}
- if (!noPageSeparation()) {
+ if (pagination) {
hnode = openPage(hnode, pageNum);
}
@@ -106,7 +106,7 @@ public class Separator {
}
public Node processPageBreak(Node currentNode, Node hnode, Integer pageNum){
- if (noPageSeparation()){
+ if (!pagination){
return hnode;
}
if (pageOpened) {
@@ -124,7 +124,7 @@ public class Separator {
* Opens main document section heading tag
*/
public Node startDocument(Node hnode, String title, int pageNum){
- if (noHeadingSeparation() && noPageSeparation()){
+ if (noHeadingSeparation() && !pagination){
return hnode;
}
if(headingSeparation.equals(SECTIONS)){
@@ -137,7 +137,7 @@ public class Separator {
}
//Method to close open tags at the end of the document
public Node endDocument(Node hnode){
- if (noHeadingSeparation() && noPageSeparation()){
+ if (noHeadingSeparation() && !pagination){
return hnode;
}
if (pageOpened){
@@ -299,15 +299,12 @@ public class Separator {
return hnode;
}
public Node openPage(Node hnode, Integer pageNum){
- if (pageOpened == true) {
+ if (pageOpened == true || !pagination) {
return hnode;
}
- if (pagination){
- hnode = openPageDiv(hnode, pageNum);
- pageOpened = true;
- }
+ hnode = openPageDiv(hnode, pageNum);
+ pageOpened = true;
hnode = enterPageContainer(hnode);
-
return hnode;
}
@@ -340,9 +337,6 @@ public class Separator {
private static boolean noHeadingSeparation() {
return headingSeparation.equals(NONE);
}
- private static boolean noPageSeparation() {
- return !pagination;
- }
private static String openHeadingCommentText(String title) {
String comment = "\n\n" + title
+ "\n";
diff --git a/src/main/java/writer2latex/xhtml/content/TextParser.java b/src/main/java/writer2latex/xhtml/content/TextParser.java
index c74af6e..06f702d 100644
--- a/src/main/java/writer2latex/xhtml/content/TextParser.java
+++ b/src/main/java/writer2latex/xhtml/content/TextParser.java
@@ -66,7 +66,7 @@ public class TextParser extends Parser {
private int nSplitAfter = 150000;
// TODO: Collect soft page breaks between table rows
private boolean bPendingPageBreak = false; // We have encountered a page break which should be inserted asap
- private int splitResultsLevel = 0; // The outline level at which to split files (0=no split)
+ private int splitHeadingLevel = 0; // The outline level at which to split files (0=no split)
private int nRepeatLevels = 5; // The number of levels to repeat when splitting (0=no repeat)
private int nLastSplitLevel = 1; // The outline level at which the last split occurred
private int nDontSplitLevel = 0; // if > 0 splitting is forbidden
@@ -115,7 +115,6 @@ public class TextParser extends Parser {
//Current master page name
private String nextMasterPage = null;
- private String headingTags = config.getHeadingTags();
private boolean pagination = config.pagination();
private boolean breakBeforeNextNode = false;
private boolean inTable = false;
@@ -126,7 +125,6 @@ public class TextParser extends Parser {
private boolean inFooter = false;
private String endnotesContext = null;
private String footnotesContext = null;
- private boolean inlineCSS;
PageContainer pageContainer = null;
public TextParser(OfficeReader ofr, XhtmlConfig config, Converter converter) {
@@ -139,7 +137,7 @@ public class TextParser extends Parser {
footCv = new FootnoteParser(ofr, config, converter);
endCv = new EndnoteParser(ofr, config, converter);
nSplitAfter = 1000*config.splitAfter();
- splitResultsLevel = config.getXhtmlSplitLevel();
+ splitHeadingLevel = config.getXhtmlSplitLevel();
nRepeatLevels = converter.isOPS() ? 0 : config.getXhtmlRepeatLevels(); // never repeat headings in EPUB
nFloatMode = ofr.isText() && config.xhtmlFloatObjects() ?
DrawParser.FLOATING : DrawParser.ABSOLUTE;
@@ -147,7 +145,6 @@ public class TextParser extends Parser {
displayHiddenText = config.displayHiddenText();
pageContainer = converter.pageContainer;
docSep = new Separator(config, converter);
- inlineCSS = config.inlineCSS();
}
/** Converts an office node as a complete text document
@@ -157,7 +154,7 @@ public class TextParser extends Parser {
public void convertDocumentContent(Element onode) {
Element hnode = converter.nextOutFile();
// Create form
- if (splitResultsLevel==0) {
+ if (splitHeadingLevel==0) {
Element form = getDrawCv().createForm();
if (form!=null) {
hnode.appendChild(form);
@@ -181,7 +178,6 @@ public class TextParser extends Parser {
// Add footnotes and endnotes
insertFootnotes(hnode,true);
- //hnode = exitPageContainer(hnode);
addFooter(hnode);
insertEndnotes(hnode, null);
@@ -191,11 +187,8 @@ public class TextParser extends Parser {
tocParser.generate();
bInToc = false;
- // Generate navigation links
- generateHeaders();
- generateFooters();
bInToc = true;
- tocParser.generatePanels(splitResultsLevel);
+ tocParser.generatePanels(splitHeadingLevel);
bInToc = false;
}
@@ -254,12 +247,6 @@ public class TextParser extends Parser {
// NAVIGATION (fill header, footer and panel with navigation links)
////////////////////////////////////////////////////////////////////////
- // The header is populated with prev/next navigation
- private void generateHeaders() { }
-
- // The footer is populated with prev/next navigation
- private void generateFooters() { }
-
////////////////////////////////////////////////////////////////////////
// BLOCK TEXT (returns current html node at end of block)
@@ -575,7 +562,7 @@ public class TextParser extends Parser {
// Export the heading
if (!bTocOnly) {
// If split output, add headings of higher levels
- if (bAfterSplit && splitResultsLevel > 0) {
+ if (bAfterSplit && splitHeadingLevel > 0) {
int nFirst = nLevel - nRepeatLevels;
if (nFirst < 0) {
nFirst = 0;
@@ -1066,42 +1053,34 @@ public class TextParser extends Parser {
// Process the contents of a fake list item
- private Node traverseFakeListItem (Node onode, Node hnode, int nLevel,
- String sStyleName, boolean bUnNumbered, boolean bRestart, int nStartValue) {
- Node child = onode.getFirstChild();
- while (child!=null) {
- if (child.getNodeType() == Node.ELEMENT_NODE) {
- String sNodeName = child.getNodeName();
-
- if (sNodeName.equals(TEXT_H)) {
- nDontSplitLevel++;
- int nOutlineLevel = getOutlineLevel((Element)onode);
- Node rememberNode = hnode;
- StyleWithProperties style = ofr.getParStyle(Misc.getAttribute(child, TEXT_STYLE_NAME));
- //hnode = maybeSplit(hnode,style,nOutlineLevel);
- handleHeading((Element)child, (Element)hnode, rememberNode!=hnode,
- ofr.getListStyle(sStyleName), nLevel,
- bUnNumbered, bRestart, nStartValue);
- nDontSplitLevel--;
- if (nDontSplitLevel==0) { bAfterHeading=true; }
- }
- else if (sNodeName.equals(TEXT_P)) {
- // Currently we only handle fakes lists containing headings
- }
- else if (sNodeName.equals(TEXT_LIST)) { // oasis
- return traverseFakeList(child, hnode, nLevel+1, sStyleName);
- }
- else if (sNodeName.equals(TEXT_ORDERED_LIST)) { // old
- return traverseFakeList(child, hnode, nLevel+1, sStyleName);
- }
- else if (sNodeName.equals(TEXT_UNORDERED_LIST)) { // old
- return traverseFakeList(child, hnode, nLevel+1, sStyleName);
- }
- }
- child = child.getNextSibling();
- }
- return hnode;
- }
+ private Node traverseFakeListItem(Node onode, Node hnode, int nLevel, String sStyleName, boolean bUnNumbered, boolean bRestart, int nStartValue) {
+ Node child = onode.getFirstChild();
+ while (child != null) {
+ if (child.getNodeType() == Node.ELEMENT_NODE) {
+ String sNodeName = child.getNodeName();
+
+ if (sNodeName.equals(TEXT_H)) {
+ nDontSplitLevel++;
+ Node rememberNode = hnode;
+ handleHeading((Element) child, (Element) hnode, rememberNode != hnode, ofr.getListStyle(sStyleName), nLevel, bUnNumbered, bRestart, nStartValue);
+ nDontSplitLevel--;
+ if (nDontSplitLevel == 0) {
+ bAfterHeading = true;
+ }
+ } else if (sNodeName.equals(TEXT_P)) {
+ // Currently we only handle fakes lists containing headings
+ } else if (sNodeName.equals(TEXT_LIST)) { // oasis
+ return traverseFakeList(child, hnode, nLevel + 1, sStyleName);
+ } else if (sNodeName.equals(TEXT_ORDERED_LIST)) { // old
+ return traverseFakeList(child, hnode, nLevel + 1, sStyleName);
+ } else if (sNodeName.equals(TEXT_UNORDERED_LIST)) { // old
+ return traverseFakeList(child, hnode, nLevel + 1, sStyleName);
+ }
+ }
+ child = child.getNextSibling();
+ }
+ return hnode;
+ }
////////////////////////////////////////////////////////////////////////
// INLINE TEXT
@@ -1146,148 +1125,121 @@ public class TextParser extends Parser {
/*
* Process inline text
*/
- protected void traverseInlineText (Node onode,Node hnode) {
- //String styleName = Misc.getAttribute(onode, TEXT_STYLE_NAME);
-
- if (onode.hasChildNodes()) {
- NodeList nList = onode.getChildNodes();
- int nLen = nList.getLength();
-
- for (int i = 0; i < nLen; i++) {
-
- Node child = nList.item(i);
- short nodeType = child.getNodeType();
-
- switch (nodeType) {
- case Node.TEXT_NODE:
- String s = child.getNodeValue();
- if (s.length() > 0) {
- hnode.appendChild( converter.createTextNode(s) );
- }
- break;
-
- case Node.ELEMENT_NODE:
- String sName = child.getNodeName();
- if (OfficeReader.isDrawElement(child)) {
- Element elm = getDrawCv().getRealDrawElement((Element)child);
- if (elm!=null) {
- String sAnchor = (elm.getAttribute(TEXT_ANCHOR_TYPE));
- if ("as-char".equals(sAnchor)) {
- getDrawCv().handleDrawElement(elm,null,(Element)hnode,DrawParser.INLINE);
- }
- }
- }
- else if (child.getNodeName().equals(TEXT_S)) {
- if (config.ignoreDoubleSpaces()) {
- hnode.appendChild( converter.createTextNode(" ") );
- }
- else {
- int count= Misc.getPosInteger(Misc.getAttribute(child,TEXT_C),1);
- for ( ; count > 0; count--) {
- hnode.appendChild( converter.createTextNode("\u00A0") );
- }
- }
- }
- else if (sName.equals(TEXT_TAB_STOP)) {
- handleTabStop(child,hnode);
- }
- else if (sName.equals(TEXT_TAB)) { // oasis
- handleTabStop(child,hnode);
- }
- else if (sName.equals(TEXT_LINE_BREAK)) {
- if (!config.ignoreHardLineBreaks()) {
- hnode.appendChild( converter.createElement("br") );
- }
- }
- else if (sName.equals(TEXT_SPAN)) {
- handleSpan(child,hnode);
- }
- else if (sName.equals(TEXT_A)) {
- handleAnchor(child,hnode);
- }
- else if (sName.equals(TEXT_FOOTNOTE)) {
- footCv.handleNote(child,hnode,footnotesContext);
- }
- else if (sName.equals(TEXT_ENDNOTE)) {
- endCv.handleNote(child,hnode,endnotesContext);
- }
- else if (sName.equals(TEXT_NOTE)) { // oasis
- if ("endnote".equals(Misc.getAttribute(child,TEXT_NOTE_CLASS))) {
- endCv.handleNote(child,hnode,endnotesContext);
- }
- else {
- footCv.handleNote(child,hnode,footnotesContext);
- }
- }
- else if (sName.equals(TEXT_SEQUENCE)) {
- handleSequence(child,hnode);
- }
- else if (sName.equals(TEXT_PAGE_NUMBER)) {
- handlePageNumber(child,hnode);
- }
- else if (sName.equals(TEXT_PAGE_COUNT)) {
- handlePageCount(child,hnode);
- }
- else if (sName.equals(TEXT_SEQUENCE_REF)) {
- handleSequenceRef(child,hnode);
- }
- else if (sName.equals(TEXT_FOOTNOTE_REF)) {
- handleNoteRef(child,hnode);
- }
- else if (sName.equals(TEXT_ENDNOTE_REF)) {
- handleNoteRef(child,hnode);
- }
- else if (sName.equals(TEXT_NOTE_REF)) { // oasis
- handleNoteRef(child,hnode);
- }
- else if (sName.equals(TEXT_REFERENCE_MARK)) {
- handleReferenceMark(child,hnode);
- }
- else if (sName.equals(TEXT_REFERENCE_MARK_START)) {
- handleReferenceMark(child,hnode);
- }
- else if (sName.equals(TEXT_REFERENCE_REF)) {
- handleReferenceRef(child,hnode);
- }
- else if (sName.equals(TEXT_BOOKMARK)) {
- handleBookmark(child,hnode);
- }
- else if (sName.equals(TEXT_BOOKMARK_START)) {
- handleBookmark(child,hnode);
- }
- else if (sName.equals(TEXT_BOOKMARK_REF)) {
- handleBookmarkRef(child,hnode);
- }
- else if (sName.equals(TEXT_ALPHABETICAL_INDEX_MARK)) {
- if (!bInToc) { indexCv.handleIndexMark(child,hnode); }
- }
- else if (sName.equals(TEXT_ALPHABETICAL_INDEX_MARK_START)) {
- if (!bInToc) { indexCv.handleIndexMarkStart(child,hnode); }
- }
- else if (sName.equals(TEXT_TOC_MARK)) {
- tocParser.handleTocMark(child,hnode);
- }
- else if (sName.equals(TEXT_TOC_MARK_START)) {
- tocParser.handleTocMark(child,hnode);
- }
- else if (sName.equals(TEXT_BIBLIOGRAPHY_MARK)) {
- handleBibliographyMark(child,hnode);
- }
- else if (sName.equals(OFFICE_ANNOTATION)) {
- converter.handleOfficeAnnotation(child,hnode);
- }
- else if (sName.startsWith("text:")) {
- traverseInlineText(child,hnode);
- }
- // other tags are ignored;
- break;
- default:
- // Do nothing
- }
- }
- }
- }
-
+ protected void traverseInlineText(Node onode, Node hnode) {
+ // String styleName = Misc.getAttribute(onode, TEXT_STYLE_NAME);
+
+ if (onode.hasChildNodes()) {
+ NodeList nList = onode.getChildNodes();
+ int nLen = nList.getLength();
+
+ for (int i = 0; i < nLen; i++) {
+
+ Node child = nList.item(i);
+ short nodeType = child.getNodeType();
+
+ switch (nodeType) {
+ case Node.TEXT_NODE:
+ String s = child.getNodeValue();
+ if (s.length() > 0) {
+ hnode.appendChild(converter.createTextNode(s));
+ }
+ break;
+
+ case Node.ELEMENT_NODE:
+ String sName = child.getNodeName();
+ if (OfficeReader.isDrawElement(child)) {
+ Element elm = getDrawCv().getRealDrawElement((Element) child);
+ if (elm != null) {
+ String sAnchor = (elm.getAttribute(TEXT_ANCHOR_TYPE));
+ if ("as-char".equals(sAnchor)) {
+ getDrawCv().handleDrawElement(elm, null, (Element) hnode, DrawParser.INLINE);
+ }
+ }
+ } else if (child.getNodeName().equals(TEXT_S)) {
+ if (config.ignoreDoubleSpaces()) {
+ hnode.appendChild(converter.createTextNode(" "));
+ } else {
+ int count = Misc.getPosInteger(Misc.getAttribute(child, TEXT_C), 1);
+ for (; count > 0; count--) {
+ hnode.appendChild(converter.createTextNode("\u00A0"));
+ }
+ }
+ } else if (sName.equals(TEXT_TAB_STOP)) {
+ handleTabStop(child, hnode);
+ } else if (sName.equals(TEXT_TAB)) { // oasis
+ handleTabStop(child, hnode);
+ } else if (sName.equals(TEXT_LINE_BREAK)) {
+ if (!config.ignoreHardLineBreaks()) {
+ hnode.appendChild(converter.createElement("br"));
+ }
+ } else if (sName.equals(TEXT_SPAN)) {
+ handleSpan(child, hnode);
+ } else if (sName.equals(TEXT_A)) {
+ handleAnchor(child, hnode);
+ } else if (sName.equals(TEXT_FOOTNOTE)) {
+ footCv.handleNote(child, hnode, footnotesContext);
+ } else if (sName.equals(TEXT_ENDNOTE)) {
+ endCv.handleNote(child, hnode, endnotesContext);
+ } else if (sName.equals(TEXT_NOTE)) { // oasis
+ if ("endnote".equals(Misc.getAttribute(child, TEXT_NOTE_CLASS))) {
+ endCv.handleNote(child, hnode, endnotesContext);
+ } else {
+ footCv.handleNote(child, hnode, footnotesContext);
+ }
+ } else if (sName.equals(TEXT_SEQUENCE)) {
+ handleSequence(child, hnode);
+ } else if (sName.equals(TEXT_PAGE_NUMBER)) {
+ handlePageNumber(child, hnode);
+ } else if (sName.equals(TEXT_PAGE_COUNT)) {
+ handlePageCount(child, hnode);
+ } else if (sName.equals(TEXT_SEQUENCE_REF)) {
+ handleSequenceRef(child, hnode);
+ } else if (sName.equals(TEXT_FOOTNOTE_REF)) {
+ handleNoteRef(child, hnode);
+ } else if (sName.equals(TEXT_ENDNOTE_REF)) {
+ handleNoteRef(child, hnode);
+ } else if (sName.equals(TEXT_NOTE_REF)) { // oasis
+ handleNoteRef(child, hnode);
+ } else if (sName.equals(TEXT_REFERENCE_MARK)) {
+ handleReferenceMark(child, hnode);
+ } else if (sName.equals(TEXT_REFERENCE_MARK_START)) {
+ handleReferenceMark(child, hnode);
+ } else if (sName.equals(TEXT_REFERENCE_REF)) {
+ handleReferenceRef(child, hnode);
+ } else if (sName.equals(TEXT_BOOKMARK)) {
+ handleBookmark(child, hnode);
+ } else if (sName.equals(TEXT_BOOKMARK_START)) {
+ handleBookmark(child, hnode);
+ } else if (sName.equals(TEXT_BOOKMARK_REF)) {
+ handleBookmarkRef(child, hnode);
+ } else if (sName.equals(TEXT_ALPHABETICAL_INDEX_MARK)) {
+ if (!bInToc) {
+ indexCv.handleIndexMark(child, hnode);
+ }
+ } else if (sName.equals(TEXT_ALPHABETICAL_INDEX_MARK_START)) {
+ if (!bInToc) {
+ indexCv.handleIndexMarkStart(child, hnode);
+ }
+ } else if (sName.equals(TEXT_TOC_MARK)) {
+ tocParser.handleTocMark(child, hnode);
+ } else if (sName.equals(TEXT_TOC_MARK_START)) {
+ tocParser.handleTocMark(child, hnode);
+ } else if (sName.equals(TEXT_BIBLIOGRAPHY_MARK)) {
+ handleBibliographyMark(child, hnode);
+ } else if (sName.equals(OFFICE_ANNOTATION)) {
+ converter.handleOfficeAnnotation(child, hnode);
+ } else if (sName.startsWith("text:")) {
+ traverseInlineText(child, hnode);
+ }
+ // other tags are ignored;
+ break;
+ default:
+ // Do nothing
+ }
+ }
+ }
+ }
+
private void handleTabStop(Node onode, Node hnode) {
// xhtml does not have tab stops, but we export and ASCII TAB character, which the
// user may choose to format