w2x: Refactoring of footnotes and endnotes export
git-svn-id: svn://svn.code.sf.net/p/writer2latex/code/trunk@251 f0f2a975-2e09-46c8-9428-3b39399b9f3c
This commit is contained in:
parent
9194604f27
commit
062d444e3d
4 changed files with 320 additions and 170 deletions
49
source/java/writer2latex/xhtml/EndnoteConverter.java
Normal file
49
source/java/writer2latex/xhtml/EndnoteConverter.java
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
/************************************************************************
|
||||||
|
*
|
||||||
|
* EndnoteConverter.java
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License version 2.1, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||||
|
* MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* Copyright: 2002-2015 by Henrik Just
|
||||||
|
*
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Version 1.6 (2015-06-11)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package writer2latex.xhtml;
|
||||||
|
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
|
import writer2latex.office.OfficeReader;
|
||||||
|
|
||||||
|
public class EndnoteConverter extends NoteConverter {
|
||||||
|
|
||||||
|
public EndnoteConverter(OfficeReader ofr, XhtmlConfig config, Converter converter) {
|
||||||
|
super(ofr,config,converter,ofr.getEndnotesConfiguration());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Insert all the endnotes
|
||||||
|
*
|
||||||
|
* @param hnode a block HTML element to contain the endnotes
|
||||||
|
*/
|
||||||
|
public void insertEndnotes(Node hnode) {
|
||||||
|
if (hasNotes()) {
|
||||||
|
if (config.getXhtmlSplitLevel()>0) { hnode = converter.nextOutFile(); }
|
||||||
|
insertNoteHeading(hnode, config.getEndnotesHeading(), "endnotes");
|
||||||
|
insertNotes(hnode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
76
source/java/writer2latex/xhtml/FootnoteConverter.java
Normal file
76
source/java/writer2latex/xhtml/FootnoteConverter.java
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
/************************************************************************
|
||||||
|
*
|
||||||
|
* FootnoteConverter.java
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License version 2.1, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||||
|
* MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* Copyright: 2002-2015 by Henrik Just
|
||||||
|
*
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Version 1.6 (2015-06-11)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package writer2latex.xhtml;
|
||||||
|
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
|
import writer2latex.office.OfficeReader;
|
||||||
|
import writer2latex.office.PropertySet;
|
||||||
|
import writer2latex.office.XMLString;
|
||||||
|
|
||||||
|
public class FootnoteConverter extends NoteConverter {
|
||||||
|
|
||||||
|
// Footnote position (can be page or document)
|
||||||
|
private boolean bFootnotesAtPage = true;
|
||||||
|
|
||||||
|
public FootnoteConverter(OfficeReader ofr, XhtmlConfig config, Converter converter) {
|
||||||
|
super(ofr,config,converter,ofr.getFootnotesConfiguration());
|
||||||
|
PropertySet configuration=ofr.getFootnotesConfiguration();
|
||||||
|
if (configuration!=null) {
|
||||||
|
bFootnotesAtPage = !"document".equals(configuration.getProperty(XMLString.TEXT_FOOTNOTES_POSITION));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Insert the footnotes gathered so far. Export will only happen if the source document configures footnotes
|
||||||
|
* per page, or if this is the final call of the method.
|
||||||
|
*
|
||||||
|
* @param hnode a block HTML element to contain the footnotes
|
||||||
|
* @param bFinal true if this is the final call
|
||||||
|
*/
|
||||||
|
public void insertFootnotes(Node hnode, boolean bFinal) {
|
||||||
|
if (hasNotes()) {
|
||||||
|
if (bFootnotesAtPage) { // Add footnote rule
|
||||||
|
Element rule = converter.createElement("hr");
|
||||||
|
StyleInfo info = new StyleInfo();
|
||||||
|
getPageSc().applyFootnoteRuleStyle(info);
|
||||||
|
getPageSc().applyStyle(info, rule);
|
||||||
|
hnode.appendChild(rule);
|
||||||
|
}
|
||||||
|
else if (bFinal) { // New page if required for footnotes as endnotes
|
||||||
|
if (config.getXhtmlSplitLevel()>0) { hnode = converter.nextOutFile(); }
|
||||||
|
insertNoteHeading(hnode, config.getFootnotesHeading(), "footnotes");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bFinal || bFootnotesAtPage) { // Insert the footnotes
|
||||||
|
insertNotes(hnode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
177
source/java/writer2latex/xhtml/NoteConverter.java
Normal file
177
source/java/writer2latex/xhtml/NoteConverter.java
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
/************************************************************************
|
||||||
|
*
|
||||||
|
* NoteConverter.java
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License version 2.1, as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||||
|
* MA 02111-1307 USA
|
||||||
|
*
|
||||||
|
* Copyright: 2002-2015 by Henrik Just
|
||||||
|
*
|
||||||
|
* All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Version 1.6 (2015-06-11)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package writer2latex.xhtml;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
|
import writer2latex.office.OfficeReader;
|
||||||
|
import writer2latex.office.PropertySet;
|
||||||
|
import writer2latex.office.XMLString;
|
||||||
|
import writer2latex.util.Misc;
|
||||||
|
|
||||||
|
/** This is a base class handles the conversion of footnotes and endnotes
|
||||||
|
*/
|
||||||
|
public class NoteConverter extends ConverterHelper {
|
||||||
|
|
||||||
|
// The notes configuration
|
||||||
|
private PropertySet configuration;
|
||||||
|
|
||||||
|
// The collection of notes
|
||||||
|
private List<Node> notes = new ArrayList<Node>();
|
||||||
|
|
||||||
|
/** Construct a new note converter
|
||||||
|
*
|
||||||
|
* @param ofr the office reader used to read the source document
|
||||||
|
* @param config the configuration
|
||||||
|
* @param converter the converter
|
||||||
|
* @param noteConfig the configuration of the notes
|
||||||
|
*/
|
||||||
|
public NoteConverter(OfficeReader ofr, XhtmlConfig config, Converter converter, PropertySet noteConfig) {
|
||||||
|
super(ofr,config,converter);
|
||||||
|
this.configuration = noteConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Handle a footnote or endnote. This method inserts the citation and stores the actual note for later processing
|
||||||
|
*
|
||||||
|
* @param onode a text:note element
|
||||||
|
* @param hnode the inline HTML element to contain the citation
|
||||||
|
*/
|
||||||
|
public void handleNote(Node onode, Node hnode) {
|
||||||
|
// Create a style span for the citation
|
||||||
|
String sCitBodyStyle = configuration.getProperty(XMLString.TEXT_CITATION_BODY_STYLE_NAME);
|
||||||
|
Element span = getTextCv().createInline((Element) hnode,sCitBodyStyle);
|
||||||
|
// Add target and back-link to the span
|
||||||
|
String sId = Misc.getAttribute(onode,XMLString.TEXT_ID);
|
||||||
|
Element link = converter.createLink(sId);
|
||||||
|
converter.addTarget(link,"body"+sId);
|
||||||
|
span.appendChild(link);
|
||||||
|
// Get the citation
|
||||||
|
Element citation = Misc.getChildByTagName(onode,XMLString.TEXT_NOTE_CITATION);
|
||||||
|
if (citation==null) { // try old format
|
||||||
|
citation = Misc.getChildByTagName(onode,XMLString.TEXT_FOOTNOTE_CITATION);
|
||||||
|
if (citation==null) {
|
||||||
|
citation = Misc.getChildByTagName(onode,XMLString.TEXT_ENDNOTE_CITATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Insert the citation
|
||||||
|
if (citation!=null) {
|
||||||
|
getTextCv().traversePCDATA(citation,link);
|
||||||
|
}
|
||||||
|
// Remember the actual note
|
||||||
|
notes.add(onode);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean hasNotes() {
|
||||||
|
return notes.size()>0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void insertNoteHeading(Node hnode, String sHeading, String sTarget) {
|
||||||
|
if (sHeading.length()>0) {
|
||||||
|
// Create heading
|
||||||
|
Element heading = converter.createElement("h1");
|
||||||
|
hnode.appendChild(heading);
|
||||||
|
heading.appendChild(converter.createTextNode(sHeading));
|
||||||
|
|
||||||
|
// Add to external content.
|
||||||
|
if (config.getXhtmlSplitLevel()>0) {
|
||||||
|
converter.addContentEntry(sHeading, 1, null);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//For single output file we need a target
|
||||||
|
converter.addTarget(heading,sTarget);
|
||||||
|
converter.addContentEntry(sHeading, 1, sTarget);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void insertNotes(Node hnode) {
|
||||||
|
int nSize = notes.size();
|
||||||
|
for (int i=0; i<nSize; i++) {
|
||||||
|
Node note = notes.get(i);
|
||||||
|
// Get the citation
|
||||||
|
Node citation = Misc.getChildByTagName(note,XMLString.TEXT_NOTE_CITATION);
|
||||||
|
if (citation==null) { // try old format
|
||||||
|
citation = Misc.getChildByTagName(note,XMLString.TEXT_FOOTNOTE_CITATION);
|
||||||
|
if (citation==null) {
|
||||||
|
citation = Misc.getChildByTagName(note,XMLString.TEXT_ENDNOTE_CITATION);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Get the body
|
||||||
|
Node body = Misc.getChildByTagName(note,XMLString.TEXT_NOTE_BODY);
|
||||||
|
if (body==null) { // try old format
|
||||||
|
body = Misc.getChildByTagName(note,XMLString.TEXT_FOOTNOTE_BODY);
|
||||||
|
if (body==null) {
|
||||||
|
body = Misc.getChildByTagName(note,XMLString.TEXT_ENDNOTE_BODY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Export the note
|
||||||
|
String sId = Misc.getAttribute(note,XMLString.TEXT_ID);
|
||||||
|
createAnchor(sId,citation);
|
||||||
|
getTextCv().traverseBlockText(body,hnode);
|
||||||
|
}
|
||||||
|
notes.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createAnchor(String sId, Node citation) {
|
||||||
|
// Create target and link
|
||||||
|
Element link = converter.createLink("body"+sId);
|
||||||
|
converter.addTarget(link,sId);
|
||||||
|
|
||||||
|
// Style it
|
||||||
|
String sCitStyle = configuration.getProperty(XMLString.TEXT_CITATION_STYLE_NAME);
|
||||||
|
StyleInfo linkInfo = new StyleInfo();
|
||||||
|
getTextSc().applyStyle(sCitStyle,linkInfo);
|
||||||
|
applyStyle(linkInfo,link);
|
||||||
|
|
||||||
|
// Add prefix
|
||||||
|
String sPrefix = configuration.getProperty(XMLString.STYLE_NUM_PREFIX);
|
||||||
|
if (sPrefix!=null) {
|
||||||
|
link.appendChild(converter.createTextNode(sPrefix));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add citation
|
||||||
|
getTextCv().traversePCDATA(citation,link);
|
||||||
|
|
||||||
|
// Add suffix
|
||||||
|
String sSuffix = configuration.getProperty(XMLString.STYLE_NUM_SUFFIX);
|
||||||
|
if (sSuffix!=null) {
|
||||||
|
link.appendChild(converter.createTextNode(sSuffix));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add space
|
||||||
|
Element span = converter.createElement("span");
|
||||||
|
span.appendChild(link);
|
||||||
|
span.appendChild(converter.createTextNode(" "));
|
||||||
|
|
||||||
|
// Save it for later insertion
|
||||||
|
getTextCv().setAsapNode(span);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -28,7 +28,6 @@ package writer2latex.xhtml;
|
||||||
|
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
import java.util.LinkedList;
|
|
||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
@ -39,7 +38,6 @@ import writer2latex.office.OfficeStyle;
|
||||||
import writer2latex.office.XMLString;
|
import writer2latex.office.XMLString;
|
||||||
import writer2latex.office.ListCounter;
|
import writer2latex.office.ListCounter;
|
||||||
import writer2latex.office.ListStyle;
|
import writer2latex.office.ListStyle;
|
||||||
import writer2latex.office.PropertySet;
|
|
||||||
import writer2latex.office.StyleWithProperties;
|
import writer2latex.office.StyleWithProperties;
|
||||||
import writer2latex.office.OfficeReader;
|
import writer2latex.office.OfficeReader;
|
||||||
|
|
||||||
|
@ -76,25 +74,16 @@ public class TextConverter extends ConverterHelper {
|
||||||
// Mode used to handle floats (depends on source doc type and config)
|
// Mode used to handle floats (depends on source doc type and config)
|
||||||
private int nFloatMode;
|
private int nFloatMode;
|
||||||
|
|
||||||
// Data used to handle all sorts of indexes
|
// Converter helpers used to handle all sorts of indexes
|
||||||
private TOCConverter tocCv;
|
private TOCConverter tocCv;
|
||||||
private LOFConverter lofCv;
|
private LOFConverter lofCv;
|
||||||
private LOTConverter lotCv;
|
private LOTConverter lotCv;
|
||||||
private AlphabeticalIndexConverter indexCv;
|
private AlphabeticalIndexConverter indexCv;
|
||||||
private BibliographyConverter bibCv;
|
private BibliographyConverter bibCv;
|
||||||
|
|
||||||
// Style names for foot- and endnotes
|
// Converter helpers used to handle footnotes and endnotes
|
||||||
private String sFntCitBodyStyle = null;
|
private FootnoteConverter footCv;
|
||||||
private String sFntCitStyle = null;
|
private EndnoteConverter endCv;
|
||||||
private String sEntCitBodyStyle = null;
|
|
||||||
private String sEntCitStyle = null;
|
|
||||||
|
|
||||||
// Footnote position (can be page or document)
|
|
||||||
private boolean bFootnotesAtPage = true;
|
|
||||||
|
|
||||||
// Gather the footnotes and endnotes
|
|
||||||
private LinkedList<Node> footnotes = new LinkedList<Node>();
|
|
||||||
private LinkedList<Node> endnotes = new LinkedList<Node>();
|
|
||||||
|
|
||||||
// Sometimes we have to create an inlinenode in a block context
|
// Sometimes we have to create an inlinenode in a block context
|
||||||
// (labels for footnotes and endnotes)
|
// (labels for footnotes and endnotes)
|
||||||
|
@ -114,6 +103,8 @@ public class TextConverter extends ConverterHelper {
|
||||||
lotCv = new LOTConverter(ofr, config, converter);
|
lotCv = new LOTConverter(ofr, config, converter);
|
||||||
bibCv = new BibliographyConverter(ofr, config, converter);
|
bibCv = new BibliographyConverter(ofr, config, converter);
|
||||||
indexCv = new AlphabeticalIndexConverter(ofr, config, converter);
|
indexCv = new AlphabeticalIndexConverter(ofr, config, converter);
|
||||||
|
footCv = new FootnoteConverter(ofr, config, converter);
|
||||||
|
endCv = new EndnoteConverter(ofr, config, converter);
|
||||||
nSplitAfter = 1000*config.splitAfter();
|
nSplitAfter = 1000*config.splitAfter();
|
||||||
nPageBreakSplit = config.pageBreakSplit();
|
nPageBreakSplit = config.pageBreakSplit();
|
||||||
nSplit = config.getXhtmlSplitLevel();
|
nSplit = config.getXhtmlSplitLevel();
|
||||||
|
@ -121,18 +112,6 @@ public class TextConverter extends ConverterHelper {
|
||||||
nFloatMode = ofr.isText() && config.xhtmlFloatObjects() ?
|
nFloatMode = ofr.isText() && config.xhtmlFloatObjects() ?
|
||||||
DrawConverter.FLOATING : DrawConverter.ABSOLUTE;
|
DrawConverter.FLOATING : DrawConverter.ABSOLUTE;
|
||||||
outlineNumbering = new ListCounter(ofr.getOutlineStyle());
|
outlineNumbering = new ListCounter(ofr.getOutlineStyle());
|
||||||
// Styles for footnotes and endnotes
|
|
||||||
PropertySet notes = ofr.getFootnotesConfiguration();
|
|
||||||
if (notes!=null) {
|
|
||||||
sFntCitBodyStyle = notes.getProperty(XMLString.TEXT_CITATION_BODY_STYLE_NAME);
|
|
||||||
sFntCitStyle = notes.getProperty(XMLString.TEXT_CITATION_STYLE_NAME);
|
|
||||||
bFootnotesAtPage = !"document".equals(notes.getProperty(XMLString.TEXT_FOOTNOTES_POSITION));
|
|
||||||
}
|
|
||||||
notes = ofr.getEndnotesConfiguration();
|
|
||||||
if (notes!=null) {
|
|
||||||
sEntCitBodyStyle = notes.getProperty(XMLString.TEXT_CITATION_BODY_STYLE_NAME);
|
|
||||||
sEntCitStyle = notes.getProperty(XMLString.TEXT_CITATION_STYLE_NAME);
|
|
||||||
}
|
|
||||||
bDisplayHiddenText = config.displayHiddenText();
|
bDisplayHiddenText = config.displayHiddenText();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,8 +138,8 @@ public class TextConverter extends ConverterHelper {
|
||||||
hnode = (Element)traverseBlockText(onode,hnode);
|
hnode = (Element)traverseBlockText(onode,hnode);
|
||||||
|
|
||||||
// Add footnotes and endnotes
|
// Add footnotes and endnotes
|
||||||
insertFootnotes(hnode,true);
|
footCv.insertFootnotes(hnode,true);
|
||||||
insertEndnotes(hnode);
|
endCv.insertEndnotes(hnode);
|
||||||
|
|
||||||
// Generate all indexes
|
// Generate all indexes
|
||||||
bInToc = true;
|
bInToc = true;
|
||||||
|
@ -179,6 +158,10 @@ public class TextConverter extends ConverterHelper {
|
||||||
|
|
||||||
protected int getAlphabeticalIndex() { return indexCv.getFileIndex(); }
|
protected int getAlphabeticalIndex() { return indexCv.getFileIndex(); }
|
||||||
|
|
||||||
|
protected void setAsapNode(Element node) {
|
||||||
|
asapNode = node;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// NAVIGATION (fill header, footer and panel with navigation links)
|
// NAVIGATION (fill header, footer and panel with navigation links)
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -410,7 +393,7 @@ public class TextConverter extends ConverterHelper {
|
||||||
// No objections, this is a level that causes splitting
|
// No objections, this is a level that causes splitting
|
||||||
nCharacterCount = 0;
|
nCharacterCount = 0;
|
||||||
bPendingPageBreak = false;
|
bPendingPageBreak = false;
|
||||||
if (converter.getOutFileIndex()>=0) { insertFootnotes(node,false); }
|
if (converter.getOutFileIndex()>=0) { footCv.insertFootnotes(node,false); }
|
||||||
return converter.nextOutFile();
|
return converter.nextOutFile();
|
||||||
}
|
}
|
||||||
return (Element) node;
|
return (Element) node;
|
||||||
|
@ -1125,17 +1108,17 @@ public class TextConverter extends ConverterHelper {
|
||||||
handleAnchor(child,hnode);
|
handleAnchor(child,hnode);
|
||||||
}
|
}
|
||||||
else if (sName.equals(XMLString.TEXT_FOOTNOTE)) {
|
else if (sName.equals(XMLString.TEXT_FOOTNOTE)) {
|
||||||
handleFootnote(child,hnode);
|
footCv.handleNote(child,hnode);
|
||||||
}
|
}
|
||||||
else if (sName.equals(XMLString.TEXT_ENDNOTE)) {
|
else if (sName.equals(XMLString.TEXT_ENDNOTE)) {
|
||||||
handleEndnote(child,hnode);
|
endCv.handleNote(child,hnode);
|
||||||
}
|
}
|
||||||
else if (sName.equals(XMLString.TEXT_NOTE)) { // oasis
|
else if (sName.equals(XMLString.TEXT_NOTE)) { // oasis
|
||||||
if ("endnote".equals(Misc.getAttribute(child,XMLString.TEXT_NOTE_CLASS))) {
|
if ("endnote".equals(Misc.getAttribute(child,XMLString.TEXT_NOTE_CLASS))) {
|
||||||
handleEndnote(child,hnode);
|
endCv.handleNote(child,hnode);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
handleFootnote(child,hnode);
|
footCv.handleNote(child,hnode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (sName.equals(XMLString.TEXT_SEQUENCE)) {
|
else if (sName.equals(XMLString.TEXT_SEQUENCE)) {
|
||||||
|
@ -1256,141 +1239,6 @@ public class TextConverter extends ConverterHelper {
|
||||||
traverseInlineText(onode,anchor);
|
traverseInlineText(onode,anchor);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Process a footnote */
|
|
||||||
private void handleFootnote(Node onode, Node hnode) {
|
|
||||||
String sId = Misc.getAttribute(onode,XMLString.TEXT_ID);
|
|
||||||
Element span = createInline((Element) hnode,sFntCitBodyStyle);
|
|
||||||
// Create target and back-link
|
|
||||||
Element link = converter.createLink(sId);
|
|
||||||
converter.addTarget(link,"body"+sId);
|
|
||||||
span.appendChild(link);
|
|
||||||
Node citation = Misc.getChildByTagName(onode,XMLString.TEXT_FOOTNOTE_CITATION);
|
|
||||||
if (citation==null) { // try oasis
|
|
||||||
citation = Misc.getChildByTagName(onode,XMLString.TEXT_NOTE_CITATION);
|
|
||||||
}
|
|
||||||
traversePCDATA(citation,link);
|
|
||||||
footnotes.add(onode);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void insertFootnotes(Node hnode, boolean bFinal) {
|
|
||||||
int n = footnotes.size();
|
|
||||||
|
|
||||||
if (n>0) {
|
|
||||||
if (bFootnotesAtPage) { // Add footnote rule
|
|
||||||
Element rule = converter.createElement("hr");
|
|
||||||
StyleInfo info = new StyleInfo();
|
|
||||||
getPageSc().applyFootnoteRuleStyle(info);
|
|
||||||
getPageSc().applyStyle(info, rule);
|
|
||||||
hnode.appendChild(rule);
|
|
||||||
}
|
|
||||||
else if (bFinal) { // New page if required for footnotes as endnotes
|
|
||||||
if (nSplit>0) { hnode = converter.nextOutFile(); }
|
|
||||||
insertNoteHeading(hnode, config.getFootnotesHeading(), "footnotes");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bFinal || bFootnotesAtPage) { // Insert the footnotes
|
|
||||||
for (int i=0; i<n; i++) {
|
|
||||||
Node footnote = footnotes.get(i);
|
|
||||||
String sId = Misc.getAttribute(footnote,XMLString.TEXT_ID);
|
|
||||||
Node citation = Misc.getChildByTagName(footnote,XMLString.TEXT_FOOTNOTE_CITATION);
|
|
||||||
if (citation==null) { // try oasis
|
|
||||||
citation = Misc.getChildByTagName(footnote,XMLString.TEXT_NOTE_CITATION);
|
|
||||||
}
|
|
||||||
Node body = Misc.getChildByTagName(footnote,XMLString.TEXT_FOOTNOTE_BODY);
|
|
||||||
if (body==null) { // try oasis
|
|
||||||
body = Misc.getChildByTagName(footnote,XMLString.TEXT_NOTE_BODY);
|
|
||||||
}
|
|
||||||
traverseNoteBody(sId,sFntCitStyle,citation,body,hnode,ofr.getFootnotesConfiguration());
|
|
||||||
}
|
|
||||||
footnotes.clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Process an endnote */
|
|
||||||
private void handleEndnote(Node onode, Node hnode) {
|
|
||||||
String sId = Misc.getAttribute(onode,XMLString.TEXT_ID);
|
|
||||||
Element span = createInline((Element) hnode,sEntCitBodyStyle);
|
|
||||||
// Create target and back-link
|
|
||||||
Element link = converter.createLink(sId);
|
|
||||||
converter.addTarget(link,"body"+sId);
|
|
||||||
span.appendChild(link);
|
|
||||||
Node citation = Misc.getChildByTagName(onode,XMLString.TEXT_ENDNOTE_CITATION);
|
|
||||||
if (citation==null) { // try oasis
|
|
||||||
citation = Misc.getChildByTagName(onode,XMLString.TEXT_NOTE_CITATION);
|
|
||||||
}
|
|
||||||
traversePCDATA(citation,link);
|
|
||||||
endnotes.add(onode);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void insertEndnotes(Node hnode) {
|
|
||||||
int n = endnotes.size();
|
|
||||||
if (n>0) {
|
|
||||||
if (nSplit>0) { hnode = converter.nextOutFile(); }
|
|
||||||
insertNoteHeading(hnode, config.getEndnotesHeading(), "endnotes");
|
|
||||||
for (int i=0; i<n; i++) {
|
|
||||||
Node endnote = endnotes.get(i);
|
|
||||||
String sId = Misc.getAttribute(endnote,XMLString.TEXT_ID);
|
|
||||||
Node citation = Misc.getChildByTagName(endnote,XMLString.TEXT_ENDNOTE_CITATION);
|
|
||||||
if (citation==null) { // try oasis
|
|
||||||
citation = Misc.getChildByTagName(endnote,XMLString.TEXT_NOTE_CITATION);
|
|
||||||
}
|
|
||||||
Node body = Misc.getChildByTagName(endnote,XMLString.TEXT_ENDNOTE_BODY);
|
|
||||||
if (body==null) { // try oasis
|
|
||||||
body = Misc.getChildByTagName(endnote,XMLString.TEXT_NOTE_BODY);
|
|
||||||
}
|
|
||||||
traverseNoteBody(sId,sEntCitStyle,citation,body,hnode,ofr.getEndnotesConfiguration());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void insertNoteHeading(Node hnode, String sHeading, String sTarget) {
|
|
||||||
if (sHeading.length()>0) {
|
|
||||||
Element heading = converter.createElement("h1");
|
|
||||||
hnode.appendChild(heading);
|
|
||||||
heading.appendChild(converter.createTextNode(sHeading));
|
|
||||||
|
|
||||||
// Add to external content.
|
|
||||||
if (nSplit>0) {
|
|
||||||
converter.addContentEntry(sHeading, 1, null);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//For single output file we need a target
|
|
||||||
converter.addTarget(heading,sTarget);
|
|
||||||
converter.addContentEntry(sHeading, 1, sTarget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Process the contents of a footnote or endnote
|
|
||||||
*/
|
|
||||||
private void traverseNoteBody (String sId, String sCitStyle, Node citation, Node onode, Node hnode, PropertySet noteConfig) {
|
|
||||||
// Create the anchor/footnote symbol:
|
|
||||||
// Create target and link
|
|
||||||
Element link = converter.createLink("body"+sId);
|
|
||||||
converter.addTarget(link,sId);
|
|
||||||
StyleInfo linkInfo = new StyleInfo();
|
|
||||||
getTextSc().applyStyle(sCitStyle,linkInfo);
|
|
||||||
applyStyle(linkInfo,link);
|
|
||||||
String sPrefix = noteConfig.getProperty(XMLString.STYLE_NUM_PREFIX);
|
|
||||||
if (sPrefix!=null) {
|
|
||||||
link.appendChild(converter.createTextNode(sPrefix));
|
|
||||||
}
|
|
||||||
traversePCDATA(citation,link);
|
|
||||||
String sSuffix = noteConfig.getProperty(XMLString.STYLE_NUM_SUFFIX);
|
|
||||||
if (sSuffix!=null) {
|
|
||||||
link.appendChild(converter.createTextNode(sSuffix));
|
|
||||||
}
|
|
||||||
// Add a space and save it for later insertion
|
|
||||||
Element span = converter.createElement("span");
|
|
||||||
span.appendChild(link);
|
|
||||||
span.appendChild(converter.createTextNode(" "));
|
|
||||||
asapNode = span;
|
|
||||||
|
|
||||||
traverseBlockText(onode,hnode);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handlePageNumber(Node onode, Node hnode) {
|
private void handlePageNumber(Node onode, Node hnode) {
|
||||||
// doesn't make any sense...
|
// doesn't make any sense...
|
||||||
hnode.appendChild( converter.createTextNode("(Page number)") );
|
hnode.appendChild( converter.createTextNode("(Page number)") );
|
||||||
|
@ -1642,7 +1490,7 @@ public class TextConverter extends ConverterHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create a styled inline node */
|
/* Create a styled inline node */
|
||||||
private Element createInline(Element node, String sStyleName) {
|
protected Element createInline(Element node, String sStyleName) {
|
||||||
StyleInfo info = new StyleInfo();
|
StyleInfo info = new StyleInfo();
|
||||||
getTextSc().applyStyle(sStyleName,info);
|
getTextSc().applyStyle(sStyleName,info);
|
||||||
Element newNode = node;
|
Element newNode = node;
|
||||||
|
|
Loading…
Add table
Reference in a new issue