/************************************************************************ * * BatchConverterImpl.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-2010 by Henrik Just * * All Rights Reserved. * * Version 1.2 (2010-04-23) * */ package writer2latex.xhtml; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.IOException; import java.util.Locale; import java.text.Collator; import org.w3c.dom.Element; import writer2latex.api.IndexPageEntry; import writer2latex.api.OutputFile; import writer2latex.base.BatchConverterBase; /** * Implementation of writer2latex.api.BatchConverter for * xhtml 1.0 strict */ public class BatchConverterImpl extends BatchConverterBase { private XhtmlConfig config; private XhtmlDocument template; private String sDefaultLang; private String sDefaultCountry; private L10n l10n; public BatchConverterImpl() { super(); config = new XhtmlConfig(); template = null; l10n = new L10n(); sDefaultLang = System.getProperty("user.language"); sDefaultCountry = System.getProperty("user.country"); l10n.setLocale(sDefaultLang, sDefaultCountry); } // Implementation of the remaining (xhtml specific) parts of the interface public writer2latex.api.Config getConfig() { return config; } public void readTemplate(InputStream is) throws IOException { template = new XhtmlDocument("Template",XhtmlDocument.XHTML10); try { template.read(is); } catch (IOException e) { template = null; throw e; } } public void readTemplate(File file) throws IOException { readTemplate(new FileInputStream(file)); } protected String getIndexFileName() { return "index.html"; } public OutputFile createIndexFile(String sHeading, IndexPageEntry[] entries) { // Create the index page (with header/footer or from template) XhtmlDocument htmlDoc = new XhtmlDocument("index",XhtmlDocument.XHTML10); htmlDoc.setConfig(config); if (template!=null) { htmlDoc.readFromTemplate(template); } else { htmlDoc.createHeaderFooter(); } org.w3c.dom.Document htmlDOM = htmlDoc.getContentDOM(); Element head = htmlDoc.getHeadNode(); if (head!=null) { // Declare charset (we need this for xhtml because we have no ) Element meta = htmlDOM.createElement("meta"); meta.setAttribute("http-equiv","Content-Type"); meta.setAttribute("content","text/html; charset="+htmlDoc.getEncoding().toLowerCase()); head.appendChild(meta); // Add link to stylesheet if (config.xhtmlCustomStylesheet().length()>0) { Element htmlStyle = htmlDOM.createElement("link"); htmlStyle.setAttribute("rel","stylesheet"); htmlStyle.setAttribute("type","text/css"); htmlStyle.setAttribute("media","all"); htmlStyle.setAttribute("href",config.xhtmlCustomStylesheet()); head.appendChild(htmlStyle); } } // Add uplink to header and footer Element header = htmlDoc.getHeaderNode(); if (header!=null) { if (config.getXhtmlUplink().length()>0) { Element a = htmlDOM.createElement("a"); a.setAttribute("href",config.getXhtmlUplink()); a.appendChild(htmlDOM.createTextNode(l10n.get(L10n.UP))); header.appendChild(a); } else { header.appendChild(htmlDOM.createTextNode(l10n.get(L10n.UP))); } } Element footer = htmlDoc.getFooterNode(); if (footer!=null) { if (config.getXhtmlUplink().length()>0) { Element a = htmlDOM.createElement("a"); a.setAttribute("href",config.getXhtmlUplink()); a.appendChild(htmlDOM.createTextNode(l10n.get(L10n.UP))); footer.appendChild(a); } else { footer.appendChild(htmlDOM.createTextNode(l10n.get(L10n.UP))); } } // Add title and heading Element title = htmlDoc.getTitleNode(); if (title!=null) { title.appendChild(htmlDOM.createTextNode(sHeading)); } Element h1 = htmlDOM.createElement("h1"); htmlDoc.getContentNode().appendChild(h1); h1.appendChild(htmlDOM.createTextNode(sHeading)); // Sort the entries int nLen = entries.length; Collator collator = Collator.getInstance(new Locale(sDefaultLang,sDefaultCountry)); for (int i = 0; i 0) { entries[i] = entryj; entries[j] = entryi; } } } } } // Insert directory entries boolean bUseIcon = config.getXhtmlDirectoryIcon().length()>0; for (int i=0; i0; for (int i=0; i