예제 #1
0
            public override SyntaxNode VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
            {
                if (!_tryParseResult.IsBoundNonStringAttribute)
                {
                    return(base.VisitMarkupTextLiteral(node));
                }

                _rewriteAsMarkup = true;
                node             = (MarkupTextLiteralSyntax)ConfigureNonStringAttribute(node);
                var tokens = new SyntaxList <SyntaxToken>(node.LiteralTokens);
                var value  = SyntaxFactory.CSharpExpressionLiteral(tokens);

                return(value.WithSpanContext(node.GetSpanContext()));
            }
예제 #2
0
            public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
            {
                var context = node.GetSpanContext();

                if (context != null && context.ChunkGenerator == SpanChunkGenerator.Null)
                {
                    base.VisitMarkupTextLiteral(node);
                    return;
                }

                if (node.LiteralTokens.Count == 1)
                {
                    var token = node.LiteralTokens[0];
                    if (token != null &&
                        token.Kind == SyntaxKind.Marker &&
                        token.Content.Length == 0)
                    {
                        // We don't want to create IR nodes for marker tokens.
                        base.VisitMarkupTextLiteral(node);
                        return;
                    }
                }

                var source          = BuildSourceSpanFromNode(node);
                var currentChildren = _builder.Current.Children;

                if (currentChildren.Count > 0 && currentChildren[currentChildren.Count - 1] is HtmlContentIntermediateNode)
                {
                    var existingHtmlContent = (HtmlContentIntermediateNode)currentChildren[currentChildren.Count - 1];

                    if (existingHtmlContent.Source == null && source == null)
                    {
                        Combine(existingHtmlContent, node);
                        base.VisitMarkupTextLiteral(node);
                        return;
                    }

                    if (source != null &&
                        existingHtmlContent.Source != null &&
                        existingHtmlContent.Source.Value.FilePath == source.Value.FilePath &&
                        existingHtmlContent.Source.Value.AbsoluteIndex + existingHtmlContent.Source.Value.Length == source.Value.AbsoluteIndex)
                    {
                        Combine(existingHtmlContent, node);
                        base.VisitMarkupTextLiteral(node);
                        return;
                    }
                }

                var contentNode = new HtmlContentIntermediateNode()
                {
                    Source = source
                };

                _builder.Push(contentNode);

                _builder.Add(new IntermediateToken()
                {
                    Content = node.GetContent(),
                    Kind    = TokenKind.Html,
                    Source  = source,
                });

                _builder.Pop();

                base.VisitMarkupTextLiteral(node);
            }