| /* 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>", "@code{"); | |
| s = replace (s, "</code>", "}"); | |
| s = replace (s, "<ol>", "\n@itemize @bullet\n"); | |
| s = replace (s, "</ol>", "\n@end itemize\n"); | |
| s = replace (s, "<ul>", "\n@itemize @bullet\n"); | |
| s = replace (s, "</ul>", "\n@end itemize\n"); | |
| s = replace (s, "<li>", "\n@item\n"); | |
| s = replace (s, "</li>", "\n"); | |
| s = replace (s, "<p>", "\n\n"); | |
| s = replace (s, "<CODE>", "@code{"); | |
| s = replace (s, "</CODE>", "}"); | |
| s = replace (s, "<OL>", "\n@itemize @bullet\n"); | |
| s = replace (s, "</OL>", "\n@end itemize\n"); | |
| s = replace (s, "<UL>", "\n@itemize @bullet\n"); | |
| s = replace (s, "</UL>", "\n@end itemize\n"); | |
| s = replace (s, "<LI>", "\n@item\n"); | |
| s = replace (s, "</LI>", "\n"); | |
| s = replace (s, "<P>", "\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; | |
| } | |
| } |