Пример #1
0
        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);
        }
Пример #2
0
        public virtual void VisitScriptExpression(ScriptExpressionNode scriptExpressionNode)
        {
            this.ThrowIfCanceled();

            VisitChildren(scriptExpressionNode);
        }
Пример #3
0
 public override void VisitScriptExpression(ScriptExpressionNode scriptExpressionNode)
 {
     base.VisitScriptExpression(scriptExpressionNode);
 }