Ejemplo n.º 1
0
    public void FormatGraphsAsBlocks(StringBuilder sb, IEnumerable <ICfgNode> trees, int indent)
    {
        var counter = new CountEventsVisitor();

        bool first          = true;
        bool lastWasTrivial = false;

        foreach (var tree in trees)
        {
            if (!first)
            {
                sb.AppendLine();
            }

            tree.Accept(counter);
            var eventCount = counter.Count;
            counter.Reset();

            if (eventCount > 1)
            {
                if (lastWasTrivial)
                {
                    sb.AppendLine();
                }
                sb.AppendLine("{");

                var visitor = new FormatScriptVisitor(sb)
                {
                    PrettyPrint = true, IndentLevel = indent, Formatter = this
                };
                visitor.IndentLevel += visitor.TabSize;
                tree.Accept(visitor);

                sb.AppendLine();
                sb.AppendLine("}");
                lastWasTrivial = false;
            }
            else
            {
                sb.Append("{ ");
                var visitor = new FormatScriptVisitor(sb)
                {
                    PrettyPrint = false
                };
                tree.Accept(visitor);
                sb.Append(" }");
                lastWasTrivial = true;
            }
            first = false;
        }
    }
Ejemplo n.º 2
0
    static void TestRoundTrip <T>(
        string source,
        ICfgNode expected,
        TokenListParser <ScriptToken, T> parser,
        bool pretty = false) where T : ICfgNode
    {
        var parsed  = TestParse(source, expected, parser);
        var visitor = new FormatScriptVisitor {
            PrettyPrint = pretty, WrapStatements = false
        };

        parsed.Accept(visitor);
        Assert.Equal(source, visitor.Code);
    }
Ejemplo n.º 3
0
    protected override ICfgNode Build(Statement statement)
    {
        var sb        = new StringBuilder();
        var formatter = new FormatScriptVisitor(sb);

        statement.Head.Accept(formatter);
        foreach (var part in statement.Parameters)
        {
            sb.Append(' ');
            part.Accept(formatter);
        }

        var e = Event.Parse(formatter.Code);

        if (e == null)
        {
            throw new InvalidOperationException($"Could not parse \"{formatter.Code}\" as an event");
        }

        return(Emit.Event(e));
    }