/*
* BeastParserDoc.java
*
* Copyright (c) 2002-2015 Alexei Drummond, Andrew Rambaut and Marc Suchard
*
* This file is part of BEAST.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership and licensing.
*
* BEAST is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* BEAST 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 BEAST; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package dr.app.tools;
import dr.app.beast.BeastParser;
import dr.app.beast.BeastVersion;
import dr.app.util.Arguments;
import dr.util.Version;
import dr.xml.WikiDocumentationHandler;
import dr.xml.XMLDocumentationHandler;
import dr.xml.XMLParseException;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
public class BeastParserDoc {
private final static Version version = new BeastVersion();
public final static String INDEX_HTML = "index_" + version.getVersionString() + ".html";
public final static String DETAIL_HTML = "detail_" + version.getVersionString() + ".html";
public final static String INDEX_WIKI = "index_" + version.getVersionString() + ".wiki";
public final static String DETAIL_WIKI = "detail_" + version.getVersionString() + ".wiki";
public final static String TITTLE = "BEAST " + version.getVersionString() + " Parser Library ("
+ version.getDateString() + ")";
public final static String AUTHORS = "Alexei Drummond, Andrew Rambaut, Walter Xie";
public final static String LINK1 = "http://beast.bio.ed.ac.uk/";
public final static String LINK2 = "http://code.google.com/p/beast-mcmc/";
public BeastParserDoc(BeastParser parser, String directory, boolean wikiFormat) throws java.io.IOException {
try {
// Create multiple directories
boolean success = (new File(directory)).mkdirs();
if (success) {
System.out.println("Directories: " + directory + " created");
}
} catch (Exception e) {//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
//
// File file = new File(directory);
//
// if (!file.exists()) {
// file.mkdir();
// }
//
// if (!file.isDirectory()) {
// throw new IllegalArgumentException(directory + " is not a directory!");
// }
PrintWriter writer;
if (wikiFormat) {
XMLDocumentationHandler handler = new WikiDocumentationHandler(parser);
writer = new PrintWriter(new FileWriter(new File(directory, DETAIL_WIKI)));
System.out.println("Building element descriptions in " + DETAIL_WIKI + " ...");
handler.outputElements(writer);
System.out.println("done.");
// writer.flush();
// writer.close();
// writer = new PrintWriter(new FileWriter(new File(directory, INDEX_WIKI)));
System.out.println("Building types table ...");
handler.outputTypes(writer);
System.out.println("done.");
writer.flush();
writer.close();
} else {
XMLDocumentationHandler handler = new XMLDocumentationHandler(parser);
System.out.println("Generate " + INDEX_HTML + " ...");
writer = new PrintWriter(new FileWriter(new File(directory, INDEX_HTML)));
handler.outputIndex(writer); // generate index.html
System.out.println("done.");
writer.flush();
writer.close();
System.out.println("Generate " + DETAIL_HTML + " ...");
writer = new PrintWriter(new FileWriter(new File(directory, DETAIL_HTML)));
handler.outputElements(writer);
System.out.println("done.");
writer.flush();
writer.close();
}
}
// private final void setup() throws XMLParseException {
// add all the XMLObject parsers you need
// }
public static void printTitle() {
System.out.println("+-----------------------------------------------\\");
System.out.print("|");
int n = 47 - TITTLE.length();
int n1 = n / 2;
int n2 = n1 + (n % 2);
for (int i = 0; i < n1; i++) { System.out.print(" "); }
System.out.print(TITTLE);
for (int i = 0; i < n2; i++) { System.out.print(" "); }
System.out.println("||");
System.out.println("| " + AUTHORS + " ||");
System.out.println("| " + LINK1 + " ||");
System.out.println("| " + LINK2 + " ||");
System.out.println("\\-----------------------------------------------\\|");
System.out.println(" \\-----------------------------------------------\\");
System.out.println();
}
public static void printUsage(Arguments arguments) {
arguments.printUsage("beastdoc", "<output-directory>");
System.out.println();
System.out.println(" Example: beastdoc ./doc");
System.out.println();
}
//Main method
public static void main(String[] args) throws java.io.IOException, XMLParseException {
printTitle();
Arguments arguments = new Arguments(
new Arguments.Option[] {
new Arguments.Option("help", "option to print this message")
});
try {
arguments.parseArguments(args);
} catch (Arguments.ArgumentException ae) {
System.out.println(ae);
printUsage(arguments);
return;
}
if (arguments.hasOption("help")) {
printUsage(arguments);
return;
}
String outputDirectory = null;
String[] args2 = arguments.getLeftoverArguments();
if (args2.length > 1) {
System.err.println("Unknown option: " + args2[1]);
System.err.println();
printUsage(arguments);
return;
}
if (args2.length > 0) {
outputDirectory = args2[0];
}
if (outputDirectory == null) {
// No input file name was given so throw up a dialog box...
outputDirectory = System.getProperty("user.dir") + System.getProperty("file.separator") + "release"
+ System.getProperty("file.separator") + "common" + System.getProperty("file.separator")
+ "doc" + System.getProperty("file.separator");
}
System.out.println("Output directory : " + outputDirectory);
// BeastParserDoc(BeastParser parser, String directory, boolean wikiFormat)
new BeastParserDoc(new BeastParser(new String[] {}, null, false, false, false), outputDirectory, true);
System.exit(0);
}
}