/*
* Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License,
* Version 1.0, and under the Eclipse Public License, Version 1.0
* (http://h2database.com/html/license.html).
* Initial Developer: H2 Group
*/
package org.h2.build.doc;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import org.h2.engine.Constants;
import org.h2.util.StringUtils;
/**
* This application merges the html documentation to one file
* (onePage.html), so that the PDF document can be created.
*/
public class MergeDocs {
private String baseDir = "docs/html";
/**
* This method is called when executing this application from the command
* line.
*
* @param args the command line parameters
*/
public static void main(String... args) throws Exception {
new MergeDocs().run();
}
private void run() throws Exception {
// the order of pages is important here
String[] pages = { "quickstart.html", "installation.html", "tutorial.html", "features.html",
"performance.html", "advanced.html", "grammar.html", "functions.html", "datatypes.html", "build.html",
"history.html", "faq.html" };
StringBuilder buff = new StringBuilder();
for (String fileName : pages) {
String text = getContent(fileName);
for (String page : pages) {
text = StringUtils.replaceAll(text, page + "#", "#");
}
text = disableRailroads(text);
text = removeHeaderFooter(fileName, text);
buff.append(text);
}
String finalText = buff.toString();
File output = new File(baseDir, "onePage.html");
PrintWriter writer = new PrintWriter(new FileWriter(output));
writer.println("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" /><title>");
writer.println("H2 Documentation");
writer.println("</title><link rel=\"stylesheet\" type=\"text/css\" href=\"stylesheetPdf.css\" /></head><body>");
writer.println("<h1>H2 Database Engine</h1>");
writer.println("<p>Version " + Constants.getFullVersion() + "</p>");
writer.println(finalText);
writer.println("</body></html>");
writer.close();
}
private static String disableRailroads(String text) {
text = StringUtils.replaceAll(text, "<!-- railroad-start -->", "<!-- railroad-start ");
text = StringUtils.replaceAll(text, "<!-- railroad-end -->", " railroad-end -->");
text = StringUtils.replaceAll(text, "<!-- syntax-start", "<!-- syntax-start -->");
text = StringUtils.replaceAll(text, "syntax-end -->", "<!-- syntax-end -->");
return text;
}
private static String removeHeaderFooter(String fileName, String text) {
// String start = "<body";
// String end = "</body>";
String start = "<!-- } -->";
String end = "<!-- [close] { --></div></td></tr></table><!-- } --><!-- analytics --></body></html>";
int idx = text.indexOf(end);
if (idx < 0) {
throw new RuntimeException("Footer not found in file " + fileName);
}
text = text.substring(0, idx);
idx = text.indexOf(start) + start.length();
text = text.substring(idx + 1);
return text;
}
private String getContent(String fileName) throws Exception {
File file = new File(baseDir, fileName);
int length = (int) file.length();
char[] data = new char[length];
FileReader reader = new FileReader(file);
int off = 0;
while (length > 0) {
int len = reader.read(data, off, length);
off += len;
length -= len;
}
reader.close();
String s = new String(data);
return s;
}
}