htmlvis.beh.html

HtmlVisitor{
	(@
  private static final int CD = 0, BEH = 1, JAVA = 2;
  private int type; // file extension type
  private Hashtable hash; // to look up classnames
  private File outputfile; // name of output file
  private java.io.PrintWriter out;
  java.io.PrintWriter get_out() { return out; }
  void set_out(java.io.PrintWriter new_out) { out = new_out; }

  /** provide output filename and hashtable of classes */
  HtmlVisitor(java.io.PrintWriter out, File file, Hashtable h) { 
    set_out(out); 
    outputfile = file;
    if (file.toString().endsWith(".cd")) 
      type = CD; 
    else if (file.toString().endsWith(".beh")) 
      type = BEH;
    else if (file.toString().endsWith(".java")) 
      type = JAVA;
    hash = h; 
  }

  /** Generates the HTML code for a class.
	Peforms all the logic for cross-referencing classes
	among the various file types
    */
  public void htmlTagBeg(String src)  {
    int name_index = 0;
    int index = 0, index2 = 0;
    int count = 0; // which class reference
    boolean anchor = false; // did we already place an anchor?
    boolean onclick = false; // was an onClick placed?
    HtmlClassIndex hci;
    String otherfile = ""; // cross-reference filename
    String otherfile2 = ""; // cross-reference filename

    // see if the classname is already in the hashtable
    hci = (HtmlClassIndex)hash.get(src);
    if(hci == null) {
      // provide a new one
      hci = new HtmlClassIndex();
    }
    // what type of file are we parsing?
    // get the proper extension index and reference count
    switch(type) {
    case CD:	{
      // this is a cd file
      index = Program.findExtIndex(".beh"); // cd file references beh file
      // get the next class reference number
      count = hci.getCd().size(); 
      hci.addCd(outputfile.toString()); // store filename for this reference
      // find first ref in list of beh name tags
      if(!hci.getBeh().isEmpty())
	otherfile = (String)hci.getBeh().firstElement();
      if(Program.getJavaFiles().contains(new File(Program.gendir, 
						  src + ".java"))) {
	// reference java file
	index2 = Program.findExtIndex(".java"); // references java file
	otherfile2 = Program.gen + src + ".java";
      }
      break;
    }
    case BEH: { 
      // this is a behfile
      if(Program.getHtmlCdClassNames().containsKey(src)) {
	// reference the cd file
	index = Program.findExtIndex(".cd"); // beh references cd file
	otherfile = ((Vector)Program.getFiles().elementAt(index)).elementAt(name_index).toString();
      }
      if(Program.getJavaFiles().contains(new File(Program.gendir, 
						  src + ".java"))) {
	// reference java file
	index2 = Program.findExtIndex(".java"); // references java file
	otherfile2 = Program.gen + src + ".java";
      }
      // get the next class reference number
      count = hci.getBeh().size();
      hci.addBeh(outputfile.toString()); // store filename for this reference
      break;
    }
    case JAVA: {
      // this is a javafile
      if(Program.getHtmlCdClassNames().containsKey(src)) {
	// reference the cd file
	index = Program.findExtIndex(".cd"); // java references cd file
	otherfile = "../" + ((Vector)Program.getFiles().elementAt(index)).elementAt(name_index).toString();
      }
      if(Program.getHtmlBehClassNames().containsKey(src)) {
	// reference beh file
	// find first ref in list of beh name tags
	if(!hci.getBeh().isEmpty()) {
	  index2 = Program.findExtIndex(".beh"); // cd file references beh file
	  otherfile2 = "../" + (String)hci.getBeh().firstElement();
	}
      }
      count = 0; // this will be the class reference number
      hci = null; // don't update hci table
      break;
    }
    default:
      System.err.println("Invalid file type in htmlTagBeg()");
      return;
    }
    // update the class name table
    if(hci != null)
      hash.put(src, hci); // replace with update class index entry
    // place a name tag at this location for a reference
    out.print("<A NAME=\"" + src + count + "\">"); // name tag unique
    // reference class index in reference file
    out.print("<A HREF=\"" + (type == JAVA ? "../" : "") + Program.getReferFile() + "#" + src + "\"");
    // hyperlink other files
    if(!otherfile.equals("") && (index >= 0)) {
      out.print(" onClick=\"top.frames[" + (index + Program.cdframeoffset) 
		+ "].location='" + otherfile + Program.htmlext + "#" + src + "0';");
      onclick = true;
    }
    if(!otherfile2.equals("") && (index2 >= 0)) {
      if(!onclick)
	out.print(" onClick=\"");
      out.print("top.frames[" + (index2 + Program.cdframeoffset) 
		+ "].location='" + otherfile2 + Program.htmlext + "#" + src + "0';");
      onclick = true;
    }
    if(onclick)
      out.print("return true;\"");
    out.print(">");
  }

  /** end of HTML anchor */
  public void htmlTagEnd() { out.print("</A>"); }

  /** HTML special characters need to be converted when they occur in text/code 
      or browser will think they are a tag or get confused.
    */
  private String htmlConvertSpecialChar(String s) {
    String ret = "";
    try {
      StringReader r = new StringReader(s);
      StringWriter w = new StringWriter();
      int ch;
      while((ch  = r.read()) >= 0) {
	switch(ch) {
	case '<':
	  w.write("&lt;");
	  break;
	case '>':
	  w.write("&gt;");
	  break;
	case '&':
	  w.write("&amp;");
	  break;
	case '"':
	  w.write("&quot;");
	  break;
	default:
	  w.write(ch);
	  break;
	}
      }
      r.close();
      ret = w.toString(); 
      w.close();
    } catch (IOException exc) {
      System.err.println("StringReader/Writer Exception");
    }
    return ret;
  }
  @)
	private void space()(@
    if (needSpace) out.print(" ");
    needSpace = false;
  @)
	after-> Program, pkg, Package (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	after-> Program, imports, Import_SList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	after-> Program, preamble, Preamble (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Package, packagename, PackageName (@
    space();
    out.print("package");
    needSpace = true;
  @)
	after-> Package, packagename, PackageName (@
    out.print(";");
    needSpace = false;
  @)
	before-> Import, packagename, PackageName (@
    space();
    out.print("import");
    needSpace = true;
  @)
	after Import (@
    out.print(";");
    needSpace = false;
  @)
	before ImportAllClasses (@
    out.print(".*");
    needSpace = false;
  @)
	before-> ClassGraph, defdict, Hashtable (@
    space();
    out.print(source.get_defdict());
    needSpace = true;
  @)
	before-> ClassGraph, tg, TraversalGraph (@
    space();
    out.print("tg:");
    needSpace = false;
    space();
    out.print(source.get_tg());
    needSpace = true;
  @)
	before DoParse (@
    out.print("*parse*");
    needSpace = false;
  @)
	before DontParse (@
    out.print("*noparse*");
    needSpace = false;
  @)
	before BeginVisitors (@
    out.print("*visitors*");
    needSpace = false;
  @)
	before EndVisitors (@
    out.print("*endvisitors*");
    needSpace = false;
  @)
	before-> ClassDef, parsedirective, ParseDirective (@
    out.print(" ");
    needSpace = false;
  @)
	before-> ClassDef, classparts, ClassParts (@
    out.print(" ");
    needSpace = false;
  @)
	before-> ClassDef, eoftoken, EOFtoken (@
    out.print(" ");
    needSpace = false;
  @)
	after ClassDef (@
    out.print(".");
    needSpace = false;
  @)
	before PublicClass (@
    out.print("*public*");
    needSpace = false;
  @)
	before FinalClass (@
    out.print("*final*");
    needSpace = false;
  @)
	before InterfaceClass (@
    out.print("*interface*");
    needSpace = false;
  @)
	before VisitorClass (@
    out.print("*visitor*");
    needSpace = false;
  @)
	before NotParsedClass (@
    out.print("*notparsed*");
    needSpace = false;
  @)
	before-> ParamClassName, parameters, ClassName_Commalist (@
    out.print("(");
    needSpace = false;
  @)
	after-> ParamClassName, parameters, ClassName_Commalist (@
    out.print(")");
    needSpace = false;
  @)
	before-> ConstOrAltClass, parts, PartOrSyntax_List (@
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  @)
	after-> ConstOrAltClass, parents, ClassParents (@
    indent--;
    indent--;
    indent--;
  @)
	before-> Part, partname, PartName (@
    out.print("&lt;");
    needSpace = false;
  @)
	after-> Part, partname, PartName (@
    out.print("&gt;");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before FinalPart (@
    out.print("*final*");
    needSpace = false;
  @)
	before StaticPart (@
    out.print("*static*");
    needSpace = false;
  @)
	before ReadOnlyPart (@
    out.print("*read-only*");
    needSpace = false;
  @)
	before PrivatePart (@
    out.print("*private*");
    needSpace = false;
  @)
	before DerivedPart (@
    out.print("*derived*");
    needSpace = false;
  @)
	before-> PartInit, javacode, JavaCode (@
    out.print("*init*");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before OptionalPart (@
    out.print("[");
    needSpace = false;
  @)
	after-> OptionalPart, part, Part_Sandwich (@
    out.print("]");
    needSpace = false;
  @)
	before-> ClassParents, superclasses, Superclass_Commalist (@
    out.print(" ");
    needSpace = false;
    out.print("*extends*");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> ClassParents, interfaces, Interface_Commalist (@
    out.print(" ");
    needSpace = false;
    out.print("*implements*");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before ConstructionClass (@
    out.print("=");
    needSpace = false;
  @)
	before AlternationClass (@
    out.print(":");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  @)
	after-> AlternationClass, subclasses, Subclass_Barlist (@
    indent--;
    indent--;
    indent--;
  @)
	before Common (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
    out.print("*common*");
    needSpace = false;
    indent--;
    indent--;
    indent--;
  @)
	before-> LocalLookahead, javacode, JavaCode (@
    out.print("*lookahead*");
    needSpace = false;
  @)
	before-> RepetitionClass, sandwiched, RepeatedPart_Sandwich (@
    out.print("~");
    needSpace = false;
  @)
	after-> RepeatedPart, nonempty, ClassSpec (@
    out.print("{");
    needSpace = false;
  @)
	after-> RepeatedPart, repeated, ClassSpec_Sandwich (@
    out.print(" ");
    needSpace = false;
    out.print("}");
    needSpace = false;
  @)
	before-> ClassSpec, actual_parameters, ClassSpec_Commalist (@
    out.print("(");
    needSpace = false;
  @)
	after-> ClassSpec, actual_parameters, ClassSpec_Commalist (@
    out.print(")");
    needSpace = false;
  @)
	before-> PlainSyntax, string, String (@
    space();
    out.print("\"" + source.get_string() + "\"");
    needSpace = true;
  @)
	before PrintIndent (@
    out.print("+");
    needSpace = false;
  @)
	before PrintUnindent (@
    out.print("-");
    needSpace = false;
  @)
	before PrintSkip (@
    out.print("*l");
    needSpace = true;
  @)
	before PrintSpace (@
    out.print("*s");
    needSpace = true;
  @)
	before EOFtoken (@
    out.print("*EOF*");
    needSpace = false;
  @)
	before-> StrategyDefinition, strategyname, StrategyName (@
    space();
    out.print("strategy");
    needSpace = true;
  @)
	before-> StrategyDefinition, exp, StrategyExpression (@
    out.print("=");
    needSpace = false;
  @)
	after-> StrategyDefinition, exp, StrategyExpression (@
    out.print(".");
    needSpace = false;
  @)
	before StrategyGraph (@
    out.print("{");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  @)
	before-> StrategyGraph, edgeVec, Vector (@
    space();
    out.print("vec:");
    needSpace = false;
    out.print(" ");
    needSpace = false;
    space();
    out.print(source.get_edgeVec());
    needSpace = true;
  @)
	after-> StrategyGraph, edges, SGEdge_SList (@
    indent--;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("}");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> StrategyGraph, sources, ClassGlobSpec (@
    space();
    out.print("source:");
    needSpace = false;
  @)
	before-> StrategyGraph, sourceEdges, Integer_NList (@
    space();
    out.print("source-edge:");
    needSpace = false;
  @)
	before-> StrategyGraph, targets, ClassGlobSpec (@
    space();
    out.print("target:");
    needSpace = false;
  @)
	before-> SGEdge, dest, ClassGlobSpec (@
    out.print(" ");
    needSpace = false;
    out.print("->");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before Through (@
    space();
    out.print("through");
    needSpace = true;
  @)
	before Via (@
    space();
    out.print("via");
    needSpace = true;
  @)
	before Bypassing (@
    space();
    out.print("bypassing");
    needSpace = true;
  @)
	before OnlyThrough (@
    space();
    out.print("only-through");
    needSpace = true;
  @)
	before To (@
    space();
    out.print("to");
    needSpace = true;
  @)
	before ToStop (@
    space();
    out.print("to-stop");
    needSpace = true;
  @)
	before-> StrategyVariable, strategyname, StrategyName (@
    space();
    out.print("do");
    needSpace = true;
  @)
	before-> CompoundStrategy, args, StrategyExpression_Commalist (@
    out.print("(");
    needSpace = false;
  @)
	after-> CompoundStrategy, args, StrategyExpression_Commalist (@
    out.print(")");
    needSpace = false;
  @)
	before Join (@
    space();
    out.print("join");
    needSpace = true;
  @)
	before Merge (@
    space();
    out.print("merge");
    needSpace = true;
  @)
	before Intersect (@
    space();
    out.print("intersect");
    needSpace = true;
  @)
	before GlobSet (@
    out.print("{");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	after-> GlobSet, globs, Glob_Commalist (@
    out.print(" ");
    needSpace = false;
  @)
	after GlobSet (@
    out.print("}");
    needSpace = false;
  @)
	before-> PartGlob, source, SourceGlob (@
    out.print("->");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> PartGlob, name, PartNameGlob (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> PartGlob, dest, DestGlob (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> SubclassGlob, source, SourceGlob (@
    out.print("=>");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> SubclassGlob, dest, DestGlob (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> SuperclassGlob, source, SourceGlob (@
    out.print(":>");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> SuperclassGlob, dest, DestGlob (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before AnyClass (@
    out.print("*");
    needSpace = false;
  @)
	before AnyPart (@
    out.print("*");
    needSpace = false;
  @)
	before-> ClassGlobSet, globs, ClassGlob_Commalist (@
    out.print("{");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	after-> ClassGlobSet, globs, ClassGlob_Commalist (@
    out.print(" ");
    needSpace = false;
    out.print("}");
    needSpace = false;
  @)
	before ClassMethods (@
    out.print("{");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  @)
	after-> ClassMethods, methods, Method_SList (@
    indent--;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("}");
    needSpace = false;
  @)
	before-> ClassMethods, wrapperdict, Hashtable (@
    space();
    out.print("wrappers:");
    needSpace = false;
    space();
    out.print(source.get_wrapperdict());
    needSpace = true;
  @)
	before-> HostSet, exactHosts, Hashtable (@
    space();
    out.print("exact:");
    needSpace = false;
    space();
    out.print(source.get_exactHosts());
    needSpace = true;
  @)
	before-> HostSet, partnames, Hashtable (@
    space();
    out.print("partnames:");
    needSpace = false;
    space();
    out.print(source.get_partnames());
    needSpace = true;
  @)
	before-> HostSet, globs, GlobSet (@
    space();
    out.print("globs:");
    needSpace = false;
  @)
	before-> TraversalDef, name, TraversalName (@
    space();
    out.print("traversal");
    needSpace = true;
  @)
	before-> TraversalDef, strat, StrategyExpression (@
    out.print(" ");
    needSpace = false;
    out.print("{");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("\t");
    indent++;
    needSpace = false;
  @)
	after-> TraversalDef, strat, StrategyExpression (@
    out.print(";");
    needSpace = false;
    indent--;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("}");
    needSpace = false;
  @)
	before TraversalParms (@
    out.print("(");
    needSpace = false;
  @)
	after TraversalParms (@
    out.print(")");
    needSpace = false;
  @)
	after-> MethodSignature, name, MethodName (@
    out.print("(");
    needSpace = false;
  @)
	after MethodSignature (@
    out.print(")");
    needSpace = false;
  @)
	before PublicMethod (@
    space();
    out.print("public");
    needSpace = true;
  @)
	before ProtectedMethod (@
    space();
    out.print("protected");
    needSpace = true;
  @)
	before PrivateMethod (@
    space();
    out.print("private");
    needSpace = true;
  @)
	before StaticMethod (@
    space();
    out.print("static");
    needSpace = true;
  @)
	before FinalMethod (@
    space();
    out.print("final");
    needSpace = true;
  @)
	before AbstractMethod (@
    space();
    out.print("abstract");
    needSpace = true;
  @)
	before ArraySpec (@
    out.print("[");
    needSpace = false;
    out.print("]");
    needSpace = false;
  @)
	before NoMethodBody (@
    out.print(";");
    needSpace = false;
  @)
	before Equals (@
    out.print("=");
    needSpace = false;
  @)
	before-> WithVisitorRef, visitorClasses, ClassName_Commalist (@
    space();
    out.print("with");
    needSpace = true;
  @)
	after-> WithVisitorRef, visitorClasses, ClassName_Commalist (@
    out.print(";");
    needSpace = false;
  @)
	before-> ParenVisitorRef, visitorClasses, ClassName_Commalist (@
    out.print("(");
    needSpace = false;
  @)
	after-> ParenVisitorRef, visitorClasses, ClassName_Commalist (@
    out.print(")");
    needSpace = false;
    out.print(";");
    needSpace = false;
  @)
	before Before (@
    space();
    out.print("before");
    needSpace = true;
  @)
	before Around (@
    space();
    out.print("around");
    needSpace = true;
  @)
	before After (@
    space();
    out.print("after");
    needSpace = true;
  @)
	before Getter (@
    space();
    out.print("get");
    needSpace = true;
  @)
	before Setter (@
    space();
    out.print("set");
    needSpace = true;
  @)
	before-> Constructor, javacode, JavaCode (@
    space();
    out.print("init");
    needSpace = true;
  @)
	before ReturnValue (@
    space();
    out.print("return");
    needSpace = true;
  @)
	before-> ClassName, name, Name (@
    if(!source.isBuiltinType() &&  !source.isTerminalClass()) 
    {
      space();
      htmlTagBeg(source.get_name().toString());
      needSpace = false;
    }
  @)
	after-> ClassName, name, Name (@
    if(!source.isBuiltinType() &&  !source.isTerminalClass())
      htmlTagEnd();
  @)
	before-> PartName, name, Ident (@
    space();
    out.print(source.get_name());
    needSpace = true;
  @)
	before-> MethodName, name, Ident (@
    space();
    out.print(source.get_name());
    needSpace = true;
  @)
	before-> ParmName, name, Ident (@
    space();
    out.print(source.get_name());
    needSpace = true;
  @)
	before-> StrategyName, name, Ident (@
    space();
    out.print(source.get_name());
    needSpace = true;
  @)
	before-> JavaCode, code, Text (@
    space();
    out.print("(@" + htmlConvertSpecialChar(source.get_code().toString()) + "@" + ")");
    needSpace = true;
  @)
	before-> ClassType, is_con, boolean (@
    space();
    out.print(source.get_is_con());
    needSpace = true;
  @)
	before-> ClassType, is_alt, boolean (@
    space();
    out.print(source.get_is_alt());
    needSpace = true;
  @)
	before-> ClassType, is_rep, boolean (@
    space();
    out.print(source.get_is_rep());
    needSpace = true;
  @)
	before-> ClassType, is_public, boolean (@
    space();
    out.print(source.get_is_public());
    needSpace = true;
  @)
	before-> ClassType, is_final, boolean (@
    space();
    out.print(source.get_is_final());
    needSpace = true;
  @)
	before-> ClassType, is_interface, boolean (@
    space();
    out.print(source.get_is_interface());
    needSpace = true;
  @)
	before-> ClassType, is_not_parsed, boolean (@
    space();
    out.print(source.get_is_not_parsed());
    needSpace = true;
  @)
	before-> ClassType, is_visitor, boolean (@
    space();
    out.print(source.get_is_visitor());
    needSpace = true;
  @)
	before-> PartType, is_final, boolean (@
    space();
    out.print(source.get_is_final());
    needSpace = true;
  @)
	before-> PartType, is_static, boolean (@
    space();
    out.print(source.get_is_static());
    needSpace = true;
  @)
	before-> PartType, is_derived, boolean (@
    space();
    out.print(source.get_is_derived());
    needSpace = true;
  @)
	before-> PartType, has_getter, boolean (@
    space();
    out.print(source.get_has_getter());
    needSpace = true;
  @)
	before-> PartType, has_setter, boolean (@
    space();
    out.print(source.get_has_setter());
    needSpace = true;
  @)
	before-> ConstructionRuleGenerator, opt, boolean (@
    space();
    out.print(source.get_opt());
    needSpace = true;
  @)
	before-> ConstructionRuleGenerator, constr, boolean (@
    space();
    out.print(source.get_constr());
    needSpace = true;
  @)
	before-> GlobMatcher, found_one, boolean (@
    space();
    out.print(source.get_found_one());
    needSpace = true;
  @)
	before-> SGEdgeMatcher, c, ClassNameI (@
    space();
    out.print(source.get_c());
    needSpace = true;
  @)
	before-> SGEdgeMatcher, index, int (@
    space();
    out.print(source.get_index());
    needSpace = true;
  @)
	before-> SGEdgeMatcher, return_val, Vector (@
    space();
    out.print(source.get_return_val());
    needSpace = true;
  @)
	before-> WrapperCallGenerator, cont, String (@
    space();
    out.print("\"" + source.get_cont() + "\"");
    needSpace = true;
  @)
	before-> WrapperCallGenerator, indent, boolean (@
    space();
    out.print(source.get_indent());
    needSpace = true;
  @)
	before-> WrapperCallGenerator, return_val, String (@
    space();
    out.print("\"" + source.get_return_val() + "\"");
    needSpace = true;
  @)
	before-> WrapperCodeGenerator, code, Text (@
    space();
    out.print("(@" + htmlConvertSpecialChar(source.get_code().toString()) + "@" + ")");
    needSpace = true;
  @)
	before-> PartGetter, isPart, boolean (@
    space();
    out.print(source.get_isPart());
    needSpace = true;
  @)
	before-> TGVertexCollector, tg, TraversalGraph (@
    space();
    out.print(source.get_tg());
    needSpace = true;
  @)
	before-> HtmlVisitor, indent, int (@
    space();
    out.print(source.get_indent());
    needSpace = true;
  @)
	before-> HtmlVisitor, needSpace, boolean (@
    space();
    out.print(source.get_needSpace());
    needSpace = true;
  @)
	before-> FindVisitorTargetsV, btargets, Vector (@
    space();
    out.print(source.get_btargets());
    needSpace = true;
  @)
	before-> FindVisitorTargetsV, atargets, Vector (@
    space();
    out.print(source.get_atargets());
    needSpace = true;
  @)
	before-> FindVisitorTargetsV, aroundtargets, Vector (@
    space();
    out.print(source.get_aroundtargets());
    needSpace = true;
  @)
	before-> FindVisitorTargetsV, visitorname, String (@
    space();
    out.print("\"" + source.get_visitorname() + "\"");
    needSpace = true;
  @)
	before-> FindVisitorTargetsV, doing, Vector (@
    space();
    out.print(source.get_doing());
    needSpace = true;
  @)
	before-> CreateMethodsV, baseclassname, String (@
    space();
    out.print("\"" + source.get_baseclassname() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, classname, String (@
    space();
    out.print("\"" + source.get_classname() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, btargets, Vector (@
    space();
    out.print(source.get_btargets());
    needSpace = true;
  @)
	before-> CreateMethodsV, atargets, Vector (@
    space();
    out.print(source.get_atargets());
    needSpace = true;
  @)
	before-> CreateMethodsV, aroundtargets, Vector (@
    space();
    out.print(source.get_aroundtargets());
    needSpace = true;
  @)
	before-> CreateMethodsV, abort, boolean (@
    space();
    out.print(source.get_abort());
    needSpace = true;
  @)
	before-> CreateMethodsV, doneclasses, Vector (@
    space();
    out.print(source.get_doneclasses());
    needSpace = true;
  @)
	before-> CreateMethodsV, makeprotoparts, String (@
    space();
    out.print("\"" + source.get_makeprotoparts() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, makeprotosubclasses, String (@
    space();
    out.print("\"" + source.get_makeprotosubclasses() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, makeprotomain, String (@
    space();
    out.print("\"" + source.get_makeprotomain() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, pathtravmain, String (@
    space();
    out.print("\"" + source.get_pathtravmain() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, traverseparts, String (@
    space();
    out.print("\"" + source.get_traverseparts() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, traversesubclasses, String (@
    space();
    out.print("\"" + source.get_traversesubclasses() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, partcounter, int (@
    space();
    out.print(source.get_partcounter());
    needSpace = true;
  @)
	before-> CreateMethodsV, subclasscounter, int (@
    space();
    out.print(source.get_subclasscounter());
    needSpace = true;
  @)
	before-> CreateMethodsV, optionalpart, boolean (@
    space();
    out.print(source.get_optionalpart());
    needSpace = true;
  @)
	before-> CreateMethodsV, partsdone, Vector (@
    space();
    out.print(source.get_partsdone());
    needSpace = true;
  @)
	before-> CreateMethodsV, graphstr, String (@
    space();
    out.print("\"" + source.get_graphstr() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, partstr, String (@
    space();
    out.print("\"" + source.get_partstr() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, subclassstr, String (@
    space();
    out.print("\"" + source.get_subclassstr() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, visitorstr, String (@
    space();
    out.print("\"" + source.get_visitorstr() + "\"");
    needSpace = true;
  @)
	before-> CreateMethodsV, hierarchy, Vector (@
    space();
    out.print(source.get_hierarchy());
    needSpace = true;
  @)
	before-> PrintVisitor, indent, int (@
    space();
    out.print(source.get_indent());
    needSpace = true;
  @)
	before-> PrintVisitor, needSpace, boolean (@
    space();
    out.print(source.get_needSpace());
    needSpace = true;
  @)
	before-> EqualVisitor, is_equal, boolean (@
    space();
    out.print(source.get_is_equal());
    needSpace = true;
  @)
	before-> DisplayVisitor, indent, int (@
    space();
    out.print(source.get_indent());
    needSpace = true;
  @)
	before-> TraceVisitor, indent, int (@
    space();
    out.print(source.get_indent());
    needSpace = true;
  @)
	after-> ClassGraphEntry_DList, first, Nonempty_ClassGraphEntry_DList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Part_Sandwich, inner, Part (@
    out.print(" ");
    needSpace = false;
  @)
	before-> RepeatedPart_Sandwich, inner, RepeatedPart (@
    out.print(" ");
    needSpace = false;
  @)
	before-> ClassSpec_Sandwich, inner, ClassSpec (@
    out.print(" ");
    needSpace = false;
  @)
	after-> Behavior_DList, first, Nonempty_Behavior_DList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Nonempty_PackageName, it, Ident (@
    space();
    out.print(source.get_it());
    needSpace = true;
  @)
	before-> Nonempty_PackageName, next, Nonempty_PackageName (@
    out.print(".");
    needSpace = false;
  @)
	before-> Nonempty_Name, it, Ident (@
    space();
    out.print(source.get_it());
    needSpace = true;
  @)
	before-> Nonempty_Name, next, Nonempty_Name (@
    out.print(".");
    needSpace = false;
  @)
	before-> Nonempty_Import_SList, next, Nonempty_Import_SList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Nonempty_ClassGraphEntry_DList, next, Nonempty_ClassGraphEntry_DList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Nonempty_ClassKeyword_List, next, Nonempty_ClassKeyword_List (@
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_ClassName_Commalist, next, Nonempty_ClassName_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_PartOrSyntax_List, next, Nonempty_PartOrSyntax_List (@
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_PartKeyword_List, next, Nonempty_PartKeyword_List (@
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_Superclass_Commalist, next, Nonempty_Superclass_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_Interface_Commalist, next, Nonempty_Interface_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_Subclass_Barlist, next, Nonempty_Subclass_Barlist (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.print("|");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_Syntax_List, next, Nonempty_Syntax_List (@
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_ClassSpec_Commalist, next, Nonempty_ClassSpec_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_Behavior_DList, next, Nonempty_Behavior_DList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Nonempty_SGEdge_SList, next, Nonempty_SGEdge_SList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Nonempty_Integer_NList, it, Integer (@
    space();
    out.print(source.get_it());
    needSpace = true;
  @)
	before-> Nonempty_Integer_NList, next, Nonempty_Integer_NList (@
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_PathSegment_List, next, Nonempty_PathSegment_List (@
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_StrategyExpression_Commalist, next, Nonempty_StrategyExpression_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_Glob_Commalist, next, Nonempty_Glob_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_ClassGlob_Commalist, next, Nonempty_ClassGlob_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_Method_SList, next, Nonempty_Method_SList (@
    out.println();
    for (int i = 0; i < indent; i++) out.print("\t");
    needSpace = false;
  @)
	before-> Nonempty_Visitor_Commalist, next, Nonempty_Visitor_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_MethodKeyword_List, next, Nonempty_MethodKeyword_List (@
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_MethodParm_Commalist, next, Nonempty_MethodParm_Commalist (@
    out.print(",");
    needSpace = false;
    out.print(" ");
    needSpace = false;
  @)
	before-> Nonempty_ArraySpec_List, next, Nonempty_ArraySpec_List (@
    out.print(" ");
    needSpace = false;
  @)
}