public override void VisitSpan(Span span) { if (span.Length > 0) { var contentPart = content.Substring(span.Start.AbsoluteIndex, span.Length); var kind = span.Kind; VisitEnter(span, contentPart); switch (kind) { case SpanKind.Code: switch (currentBlockType) { case BlockType.Directive: var rootNode = (RootNode)this.CurrentNode; var directiveNode = new DirectiveNode(this, span, contentPart); this.Push(directiveNode); rootNode.Directives.Add(directiveNode); this.CodeNodes.AddLast(directiveNode); break; default: CodeNode codeNode; if (renderStarted) { if (enterExpression) { if (IsHelperExpression(contentPart)) { codeNode = new HelperExpressionNode(this, span, contentPart); AddPushCode(codeNode); } else { if (enterScriptsSection) { codeNode = new ScriptExpressionNode(this, span, contentPart); AddPushCode(codeNode); } else { codeNode = new CodeExpressionNode(this, span, contentPart); AddPushCode(codeNode); } } enterExpression = false; } else { codeNode = new RenderNode(this, span, contentPart); AddPushCode(codeNode); } } else { codeNode = new CodeNode(this, span, contentPart); AddCode(codeNode); } break; } break; case SpanKind.Markup: var markupNode = new MarkupNode(span, contentPart); if (enterAtModel) { var rootNode = (RootNode)this.CurrentNode; var modelNode = new ModelNode(this, span, contentPart); rootNode.ModelNode = modelNode; this.CodeNodes.AddLast(modelNode); enterAtModel = false; markupNode.IsModelMarkup = true; } this.CurrentNode.AddChild(markupNode); break; case SpanKind.MetaCode: if (currentBlockType == BlockType.Section) { var identifiers = span.Symbols.Cast <CSharpSymbol>().Where(s => s.Type == CSharpSymbolType.Identifier); var firstIdentifier = identifiers.First(); if (firstIdentifier.Content == "section") { var lastIdentifier = identifiers.ElementAt(1); } else { DebugUtils.Break(); } } break; case SpanKind.Transition: break; case SpanKind.Comment: break; default: DebugUtils.Break(); break; } } base.VisitSpan(span); }
public virtual void VisitScriptExpression(ScriptExpressionNode scriptExpressionNode) { this.ThrowIfCanceled(); VisitChildren(scriptExpressionNode); }
public override void VisitScriptExpression(ScriptExpressionNode scriptExpressionNode) { base.VisitScriptExpression(scriptExpressionNode); }