/* Copyright (C) 2001 Free Software Foundation
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details. */
import java.io.*;
import com.sun.javadoc.*;
public class TexinfoDoclet
{
static PrintStream outfile;
public static int optionLength(String option)
{
if (option.equals("-outfile"))
return 2;
return 0;
}
private static String replace (String s, String text, String replacement)
{
int i = s.indexOf (text);
while (i != -1)
{
s = s.substring(0, i) + replacement + s.substring(i+text.length());
i = s.indexOf (text);
}
return s;
}
private static String texify (String s)
{
if (s.indexOf('<') == -1)
return s;
s = replace (s, "", "@code{");
s = replace (s, "
", "}");
s = replace (s, "
", "\n\n");
s = replace (s, "", "@code{");
s = replace (s, "
", "}");
s = replace (s, "
", "\n\n"); return s; } private static void emitMethod (ClassDoc c, MethodDoc m) { outfile.print ("@deftypemethod " + c.typeName() + " {" + m.modifiers() + " " + m.returnType().typeName() + "} " + m.name()); outfile.print (" ("); Parameter p[] = m.parameters(); boolean first = true; for (int i = 0; i < p.length; i++) { if (!first) outfile.print (", "); outfile.print (p[i].typeName() + "@w{ }@var{" + p[i].name() + "}"); first = false; } outfile.print (") "); ClassDoc exceptions[] = m.thrownExceptions(); if (exceptions.length > 0) { outfile.print ("@*throws "); first = true; for (int i = 0; i < exceptions.length; i++) { if (!first) outfile.print (", "); outfile.print (exceptions[i].typeName()); first = false; } } outfile.println (""); outfile.println (texify (m.commentText())); outfile.println ("@end deftypemethod"); } private static void emitClass (ClassDoc c) { MethodDoc[] methods = c.methods(); for (int i = 0; i < methods.length; i++) { emitMethod (c, methods[i]); } } public static boolean start (RootDoc root) { String options[][] = root.options (); for (int i = 0; i < options.length; i++) { try { if (options[i][0].equals ("-outfile")) { outfile = new PrintStream (new FileOutputStream (options[i][1])); } } catch (java.io.IOException e) { System.err.println ("Can't write to file " + options[i][1]); return false; } } ClassDoc[] classes = root.classes(); for (int i = 0; i < classes.length; i++) { emitClass (classes[i]); } return true; } }