Exemple #1
0
        public override void WriteDocument(DocumentIRNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }

            var visitor = new Visitor(_target, _context, _tagNamesToSourceFiles);

            _context.BasicWriter     = new RuntimeBasicWriter();
            _context.TagHelperWriter = new RuntimeTagHelperWriter();

            visitor.VisitDocument(node);
        }
Exemple #2
0
 public override void VisitDocument(DocumentIRNode node)
 {
     RenderChildren(node);
 }
        protected override void ExecuteCore(RazorCodeDocument codeDocument, DocumentIRNode irDocument)
        {
            var parserOptions = irDocument.Options;

            var designTime = parserOptions.DesignTime;
            var walker     = new DirectiveWalker();

            walker.VisitDocument(irDocument);

            var classNode = walker.ClassNode;

            foreach (var node in walker.FunctionsDirectiveNodes)
            {
                node.Parent.Children.Remove(node);

                foreach (var child in node.Children.Except(node.Tokens))
                {
                    child.Parent = classNode;
                    classNode.Children.Add(child);
                }
            }

            foreach (var node in walker.InheritsDirectiveNodes.Reverse())
            {
                node.Parent.Children.Remove(node);

                var token = node.Tokens.FirstOrDefault();
                if (token != null)
                {
                    classNode.BaseType = token.Content;
                    break;
                }
            }

            var sectionsMethodNode = new CSharpStatementIRNode();

            RazorIRBuilder.Create(sectionsMethodNode)
            .Add(new RazorIRToken()
            {
                Kind    = RazorIRToken.TokenKind.CSharp,
                Content = "public override void DefineSections() {"
            });
            classNode.Children.Add(sectionsMethodNode);

            foreach (var node in walker.SectionDirectiveNodes)
            {
                //var sectionIndex = node.Parent.Children.IndexOf(node);
                node.Parent.Children.Remove(node);

                var lambdaContent = designTime ? "__razor_section_writer" : "builder";
                var sectionName   = node.Tokens.FirstOrDefault()?.Content;
                var defineSectionStartStatement = new CSharpStatementIRNode();
                RazorIRBuilder.Create(defineSectionStartStatement)
                .Add(new RazorIRToken()
                {
                    Kind    = RazorIRToken.TokenKind.CSharp,
                    Content = $"DefineSection(\"{sectionName}\", async ({lambdaContent}) => {{"
                });

                classNode.Children.Add(defineSectionStartStatement);

                foreach (var child in node.Children.Except(node.Tokens))
                {
                    classNode.Children.Add(child);
                }

                var defineSectionEndStatement = new CSharpStatementIRNode();
                RazorIRBuilder.Create(defineSectionEndStatement)
                .Add(new RazorIRToken()
                {
                    Kind    = RazorIRToken.TokenKind.CSharp,
                    Content = "});"
                });

                classNode.Children.Add(defineSectionEndStatement);
            }

            var sectionsMethodNodeEnd = new CSharpStatementIRNode();

            RazorIRBuilder.Create(sectionsMethodNodeEnd)
            .Add(new RazorIRToken()
            {
                Kind    = RazorIRToken.TokenKind.CSharp,
                Content = "}"
            });

            classNode.Children.Add(sectionsMethodNodeEnd);
        }