public OutputClass(string name, AbstractAstTransformer visitor, IOutputAstVisitor prettyprinter, int savefilterindex) { this.name = string.Empty; this.name = name; this.transformer = visitor; this.prettyprinter = prettyprinter; this.savefilterindex = savefilterindex; }
private void Generate(SupportedLanguage language, TextReader inputstream, OutputClass output) { IParser parser = ParserFactory.CreateParser(language, inputstream); parser.Parse(); if (parser.Errors.Count > 0) { new ExceptionDialog(null, "Error Parsing Input Code").ShowDialog(); } else if (output.CodeDomProvider != null) { CodeDomVisitor visitor = new CodeDomVisitor(); visitor.VisitCompilationUnit(parser.CompilationUnit, null); for (int i = visitor.codeCompileUnit.Namespaces.Count - 1; i >= 0; i--) { if (visitor.codeCompileUnit.Namespaces[i].Types.Count == 0) { visitor.codeCompileUnit.Namespaces.RemoveAt(i); } } CodeGeneratorOptions options = new CodeGeneratorOptions(); options.BlankLinesBetweenMembers = true; StringWriter writer = new StringWriter(); output.CodeDomProvider.GenerateCodeFromCompileUnit(visitor.codeCompileUnit, writer, options); this.scintillaOutput.Text = writer.ToString(); writer.Close(); } else { AbstractAstTransformer transformer = output.CreateTransformer(); List <ISpecial> currentSpecials = parser.Lexer.SpecialTracker.CurrentSpecials; if ((language == SupportedLanguage.CSharp) && (transformer is ToVBNetConvertVisitor)) { PreprocessingDirective.CSharpToVB(currentSpecials); } else if ((language == SupportedLanguage.VBNet) && (transformer is ToCSharpConvertVisitor)) { PreprocessingDirective.VBToCSharp(currentSpecials); } parser.CompilationUnit.AcceptVisitor(transformer, null); IOutputAstVisitor outputVisitor = output.CreatePrettyPrinter(); using (SpecialNodesInserter.Install(currentSpecials, outputVisitor)) { outputVisitor.VisitCompilationUnit(parser.CompilationUnit, null); } this.scintillaOutput.Text = outputVisitor.Text; } }