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);
        }
        private InvocationExpression FirstInvocationExpression(AbstractNode invocation)
        {
            var v = new FindInvocationExpressionVisitor();

            invocation.AcceptVisitor(v, null);
            return(v.Expr);
        }
Esempio n. 3
0
        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)
        {
            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);
        }
Esempio n. 5
0
        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;
            }
        }