mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			141 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Java
		
	
	
	
/* 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;
 | 
						|
  }
 | 
						|
}
 |