コード例 #1
0
        public SyntaxList <TNode> VisitList <TNode>(SyntaxList <TNode> list) where TNode : LuaSyntaxNode
        {
            SyntaxListBuilder?alternate = null;

            for (int i = 0, n = list.Count; i < n; i++)
            {
                var item    = list[i];
                var visited = Visit(item);
                if (item != visited && alternate == null)
                {
                    alternate = new SyntaxListBuilder(n);
                    alternate.AddRange(list, 0, i);
                }

                if (alternate != null)
                {
                    RoslynDebug.Assert(visited != null && visited.Kind != SyntaxKind.None, "Cannot remove node using Syntax.InternalSyntax.SyntaxRewriter.");
                    alternate.Add(visited);
                }
            }

            if (alternate != null)
            {
                return(alternate.ToList());
            }

            return(list);
        }
コード例 #2
0
        public virtual SyntaxList <TNode> VisitList <TNode>(SyntaxList <TNode> list) where TNode : SyntaxNode
        {
            SyntaxListBuilder alternate = null;

            for (int i = 0, n = list.Count; i < n; i++)
            {
                var item    = list[i];
                var visited = this.VisitListElement(item);
                if (item != visited && alternate == null)
                {
                    alternate = new SyntaxListBuilder(n);
                    alternate.AddRange(list, 0, i);
                }

                if (alternate != null && visited != null && !visited.IsKind(SyntaxKind.None))
                {
                    alternate.Add(visited);
                }
            }

            if (alternate != null)
            {
                return(alternate.ToList());
            }

            return(list);
        }
コード例 #3
0
ファイル: SyntaxRewriter.cs プロジェクト: sbauer/AspNetCore
    public SyntaxList <TNode> VisitList <TNode>(SyntaxList <TNode> list) where TNode : GreenNode
    {
        SyntaxListBuilder alternate = null;

        for (int i = 0, n = list.Count; i < n; i++)
        {
            var item    = list[i];
            var visited = Visit(item);
            if (item != visited && alternate == null)
            {
                alternate = new SyntaxListBuilder(n);
                alternate.AddRange(list, 0, i);
            }

            if (alternate != null)
            {
                alternate.Add(visited);
            }
        }

        if (alternate != null)
        {
            return(alternate.ToList <TNode>());
        }

        return(list);
    }
コード例 #4
0
 public void AddRange(TNode[] items, int offset, int length)
 {
     _builder.AddRange(items, offset, length);
 }
コード例 #5
0
    private SyntaxList <RazorSyntaxNode> GetLegacyChildren()
    {
        // This method returns the children of this start tag in legacy format.
        // This is needed to generate the same classified spans as the legacy syntax tree.
        var builder = new SyntaxListBuilder(5);
        var tokens  = SyntaxListBuilder <SyntaxToken> .Create();

        var context = this.GetSpanContext();

        // We want to know if this tag contains non-whitespace attribute content to set the appropriate AcceptedCharacters.
        // The prefix of a start tag(E.g '|<foo| attr>') will have 'Any' accepted characters if non-whitespace attribute content exists.
        var acceptsAnyContext = new SpanContext(context.ChunkGenerator, SpanEditHandler.CreateDefault());

        acceptsAnyContext.EditHandler.AcceptedCharacters = AcceptedCharactersInternal.Any;
        var containsAttributesContent = false;

        foreach (var attribute in Attributes)
        {
            if (!string.IsNullOrWhiteSpace(attribute.GetContent()))
            {
                containsAttributesContent = true;
                break;
            }
        }

        if (!OpenAngle.IsMissing)
        {
            tokens.Add(OpenAngle);
        }
        if (Bang != null)
        {
            builder.Add(SyntaxFactory.MarkupTextLiteral(tokens.Consume()).WithSpanContext(acceptsAnyContext));

            tokens.Add(Bang);
            var acceptsNoneContext = new SpanContext(context.ChunkGenerator, SpanEditHandler.CreateDefault());
            acceptsNoneContext.EditHandler.AcceptedCharacters = AcceptedCharactersInternal.None;
            builder.Add(SyntaxFactory.RazorMetaCode(tokens.Consume()).WithSpanContext(acceptsNoneContext));
        }
        if (!Name.IsMissing)
        {
            tokens.Add(Name);
        }

        builder.Add(SyntaxFactory.MarkupTextLiteral(tokens.Consume()).WithSpanContext(containsAttributesContent ? acceptsAnyContext : context));

        builder.AddRange(Attributes);

        if (ForwardSlash != null)
        {
            tokens.Add(ForwardSlash);
        }
        if (!CloseAngle.IsMissing)
        {
            tokens.Add(CloseAngle);
        }

        if (tokens.Count > 0)
        {
            builder.Add(SyntaxFactory.MarkupTextLiteral(tokens.Consume()).WithSpanContext(context));
        }

        return(new SyntaxList <RazorSyntaxNode>(builder.ToListNode().CreateRed(this, Position)));
    }