public static string ToText(AbstractNode node) { var output = new CSharpOutputVisitor(); node.AcceptVisitor(output, null); return output.Text; }
public override string GenerateCode(AbstractNode node, string indentation) { IOutputAstVisitor visitor = CreateOutputVisitor(); int indentCount = 0; foreach (char c in indentation) { if (c == '\t') indentCount += 4; else indentCount += 1; } visitor.OutputFormatter.IndentationLevel = indentCount / 4; if (node is Statement) visitor.OutputFormatter.Indent(); node.AcceptVisitor(visitor, null); string text = visitor.Text; if (node is Statement && !text.EndsWith("\n")) text += Environment.NewLine; return text; }
public override string GenerateCode(AbstractNode node, string indentation) { StringBuilder errorBuilder = new StringBuilder(); ConverterSettings settings = new ConverterSettings("codegeneration.cs"); string output = null; Node booNode = (Node)node.AcceptVisitor(new ConvertVisitor(settings), null); if (settings.Errors.Count > 0) { foreach (CompilerError error in settings.Errors) { errorBuilder.AppendLine(error.ToString()); } } else { if (settings.Warnings.Count > 0) { foreach (CompilerWarning warning in settings.Warnings) { errorBuilder.AppendLine(warning.ToString()); } } booNode.Accept(new RemoveRedundantTypeReferencesVisitor()); using (StringWriter w = new StringWriter()) { BooPrinterVisitor printer = new BooPrinterVisitor(w); int indentCount = 0; foreach (char c in indentation) { if (c == '\t') indentCount += 4; else indentCount += 1; } indentCount /= 4; while (indentCount-- > 0) printer.Indent(); booNode.Accept(printer); output = w.ToString(); } } if (errorBuilder.Length > 0) { MessageService.ShowMessage(errorBuilder.ToString()); } return output; }
public static void InsertCode(this ITextEditor editor, AbstractNode target, AbstractNode insert, int insertOffset, bool updateCaretPos) { if (insertOffset < 0) return; var regionCorrectVisitor = new SetRegionInclusionVisitor(); insert.AcceptVisitor(regionCorrectVisitor, null); var doc = editor.Document; var codeGen = editor.Language.Properties.CodeGenerator; string indent = DocumentUtilitites.GetWhitespaceAfter(doc, doc.GetLineStartOffset(target.StartLocation)); string code = codeGen.GenerateCode(insert, indent); doc.Insert(insertOffset, code); if (updateCaretPos) { editor.Caret.Offset = insertOffset + code.Length - 1; } }
private InvocationExpression FirstInvocationExpression(AbstractNode invocation) { var v = new FindInvocationExpressionVisitor(); invocation.AcceptVisitor(v, null); return v.Expr; }