示例#1
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode  = node as IWebFormsCommentNode;
            var destNode = CommentNodeFactory.CreateCommentNode(srcNode.Text);

            return(new IRazorNode[] { destNode });
        }
示例#2
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode = (IWebFormsHtmlTagNode)node;

            if (srcNode.BlockType == CodeBlockNodeType.Complete)
            {
                return(new[]
                {
                    textNodeFactory.CreateTextNode("<" + ConvertToRazor(srcNode.Content.TrimStart('<')), CodeBlockNodeType.Complete)
                });
            }

            var convertedChildren = node.Children
                                    .SelectMany(childNode => nodeConverterProvider
                                                .NodeConverters
                                                .Where(converter => converter.CanConvertNode(childNode))
                                                .SelectMany(converter => converter.ConvertNode(childNode)));

            var startingTagContent = "<" + ConvertToRazor(srcNode.Content.TrimStart('<'));
            var startingTag        = textNodeFactory.CreateTextNode(startingTagContent, CodeBlockNodeType.Opening);
            var endingTag          = textNodeFactory.CreateTextNode($"</{srcNode.TagName}>", CodeBlockNodeType.Closing);

            return(new[] { startingTag }
                   .Concat(convertedChildren)
                   .Concat(new[] { endingTag })
                   .ToArray());
        }
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var contentTag           = node as IWebFormsServerControlNode;
            var contentPlaceHolderID = contentTag.Attributes["ContentPlaceHolderID"];
            var convertedChildren    = new List <IRazorNode>();

            foreach (var childNode in node.Children)
            {
                foreach (var converter in NodeConverterProvider.NodeConverters)
                {
                    if (converter.CanConvertNode(childNode))
                    {
                        convertedChildren.AddRange(converter.ConvertNode(childNode));
                    }
                }
            }

            if (string.Compare(contentPlaceHolderID, Configuration.BodyContentPlaceHolderID, true) != 0)
            {
                var sectionNode = SectionNodeFactory.CreateSectionNode(contentPlaceHolderID);
                foreach (var convertedNode in convertedChildren)
                {
                    sectionNode.Children.Add(convertedNode);
                }

                return(new IRazorSectionNode[] { sectionNode });
            }
            else
            {
                return(convertedChildren);
            }
        }
示例#4
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode        = node as IWebFormsCodeBlockNode;
            var requiresPrefix = srcNode.BlockType == CodeBlockNodeType.Complete || srcNode.BlockType == CodeBlockNodeType.Opening;

            if ((node.Parent != null &&
                 (node.Parent.Type == NodeType.CodeBlock ||
                  node.Parent.Type == NodeType.EncodedExpressionBlock ||
                  node.Parent.Type == NodeType.ExpressionBlock)) ||
                node is WebFormsCodeGroupNode)
            {
                requiresPrefix = false;
            }

            // Not implemented: Detection requires analysis of the C# code to determine if it contains more than one statement
            // See CodeBlockConverterTests.Should_require_block_for_multi_statement_code_block
            var requiresBlock = false;

            var code = srcNode.Code;

            code = ReplaceRenderPartial(code);

            if (code.TrimStart().StartsWith("@"))
            {
                requiresPrefix = false;
            }

            var codeNode = CodeNodeFactory.CreateCodeNode(code, requiresPrefix, requiresBlock, srcNode.BlockType);

            return(new IRazorNode[] { codeNode });
        }
示例#5
0
 private void ApplyPostprocessingFilters(IWebFormsNode rootNode)
 {
     foreach (var filter in NodeFilterProvider.Filters)
     {
         FilterChildNodes(rootNode, filter);
     }
 }
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode  = node as IWebFormsTextNode;
            var destNode = TextNodeFactory.CreateTextNode(srcNode.Text, CodeBlockNodeType.Complete);

            return(new IRazorNode[] { destNode });
        }
示例#7
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode        = node as IWebFormsCodeBlockNode;
            var requiresPrefix = srcNode.BlockType == CodeBlockNodeType.Complete || srcNode.BlockType == CodeBlockNodeType.Opening;

            // Not implemented: Detection requires analysis of the C# code to determine if it contains more than one statement
            // See CodeBlockConverterTests.Should_require_block_for_multi_statement_code_block
            var requiresBlock = false;

            var code = srcNode.Code;

            foreach (var codeConverter in _converters)
            {
                code = codeConverter.ConvertCodeBlock(code);
            }

            code = ReplaceRenderPartial(code);

            if (code.TrimStart().StartsWith("@"))
            {
                requiresPrefix = false;
            }

            var codeNode = CodeNodeFactory.CreateCodeNode(code, requiresPrefix, requiresBlock);

            return(new IRazorNode[] { codeNode });
        }
示例#8
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var result = new List <IRazorNode>();

            var directiveNode = node as IWebFormsDirectiveNode;

            if (directiveNode != null)
            {
                var attributes = directiveNode.Attributes;
                if (attributes.ContainsKey("inherits"))
                {
                    AddModelOrInheritsDirective(attributes, result);
                }
                else if (attributes.ContainsKey("namespace") &&
                         directiveNode.Directive == DirectiveType.Import)
                {
                    AddUsingDirective(attributes, result);
                }

                if (attributes.ContainsKey("masterpagefile"))
                {
                    AddLayoutDirective(attributes, result);
                }
            }

            return(result);
        }
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var contentTag           = node as IWebFormsServerControlNode;
            var shouldRender         = false;
            var contentPlaceHolderID = string.Empty;
            var convertedChildren    = new List <IRazorNode>();

            if (contentTag.Attributes.ContainsKey("ID") && contentTag.TagName.ToLower() == "asp:contentplaceholder")
            {
                shouldRender = true;
            }
            else
            {
                contentPlaceHolderID = contentTag.Attributes["ContentPlaceHolderID"];
            }

            Action <IEnumerable <IRazorNode>, IRazorNode> iterateOverChildrens = (childrens, parentNode) =>
            {
                foreach (var convertedNode in childrens)
                {
                    parentNode.Children.Add(convertedNode);
                }
            };

            foreach (var childNode in node.Children)
            {
                foreach (var converter in NodeConverterProvider.NodeConverters)
                {
                    if (converter.CanConvertNode(childNode))
                    {
                        convertedChildren.AddRange(converter.ConvertNode(childNode));
                    }
                }
            }

            IRazorSectionNode sectionNode = null;

            if (shouldRender)
            {
                sectionNode = SectionNodeFactory.CreateSectionNode(contentTag.Attributes["ID"], true);

                iterateOverChildrens(convertedChildren, sectionNode);
            }
            else if (string.Compare(contentPlaceHolderID, Configuration.BodyContentPlaceHolderID, true) != 0)
            {
                sectionNode = SectionNodeFactory.CreateSectionNode(contentPlaceHolderID);

                iterateOverChildrens(convertedChildren, sectionNode);
            }

            if (sectionNode != null)
            {
                return(new IRazorSectionNode[] { sectionNode });
            }
            else
            {
                return(convertedChildren);
            }
        }
        public void Should_parse_script_with_expression_content()
        {
            var           script       = @"<script type=""text/javascript"">alert('<%= Html.SomeText() %></gh>');</script>";
            var           document     = parser.Parse(@"<asp:Content runat=""server"">" + script + @"</asp:Content>");
            IWebFormsNode webFormsNode = document.RootNode.Children[0];

            ((IWebFormsTextNode)webFormsNode.Children[0]).Text.ShouldEqual(@"<script type=""text/javascript"">alert('");
            ((IWebFormsExpressionBlockNode)webFormsNode.Children[1]).Expression.Trim().ShouldEqual("Html.SomeText()");
            ((IWebFormsTextNode)webFormsNode.Children[2]).Text.ShouldEqual("</gh>');</script>");
        }
        public IList<IWebFormsNode> Filter(IWebFormsNode node, IWebFormsNode previousFilteredNode)
        {
            var isCodeGroupNode = node is IWebFormsCodeGroupNode;
            if (isCodeGroupNode)
            {
                var codeContentNode = node as IWebFormsContentNode;
                codeContentNode.Content = WrapNestedTemplates(codeContentNode.Content);
            }

            return new IWebFormsNode[] { node };
        }
示例#12
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode     = node as IWebFormsRawExpressionBlockNode;
            var isMultiline = srcNode.Expression.Contains("\r") || srcNode.Expression.Contains("\n");
            var expression  = srcNode.Expression.Trim(new char[] { ' ', '\t' });

            expression = expression.Replace("ResolveUrl", "Url.Content");
            return(new IRazorNode[]
            {
                ExpressionNodeFactory.CreateExpressionNode(expression, isMultiline)
            });
        }
        public IList <IWebFormsNode> Filter(IWebFormsNode node, IWebFormsNode previousFilteredNode)
        {
            var isCodeGroupNode = node is IWebFormsCodeGroupNode;

            if (isCodeGroupNode)
            {
                var codeContentNode = node as IWebFormsContentNode;
                codeContentNode.Content = WrapNestedTemplates(codeContentNode.Content);
            }

            return(new IWebFormsNode[] { node });
        }
示例#14
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var result = new List <IRazorNode>();

            var directiveNode = node as IWebFormsDirectiveNode;

            if (directiveNode != null)
            {
                if (directiveNode.Attributes.ContainsKey("inherits"))
                {
                    //	var MasterPageFile =


                    var inheritsFrom        = directiveNode.Attributes["inherits"];
                    var viewPageGenericType = new Regex("(?:Ohio.Web.Config.Rendering.SubView|Ohio.Web.UI.Fusion.FusionView|SubView)<(?<type>.*)>");
                    var typeMatch           = viewPageGenericType.Match(inheritsFrom);
                    if (typeMatch.Success)
                    {
                        result.Add(DirectiveNodeFactory.CreateDirectiveNode("model", typeMatch.Result("${type}")));
                    }
                    else if (inheritsFrom != "Ohio.Web.Config.Rendering.SubView" && inheritsFrom != "Ohio.Web.UI.Fusion.FusionView")
                    {
                        result.Add(DirectiveNodeFactory.CreateDirectiveNode("inherits", directiveNode.Attributes["inherits"]));
                    }
                }
                else if (directiveNode.Attributes.ContainsKey("namespace") &&
                         directiveNode.Directive == DirectiveType.Import)
                {
                    /* Case of of a using directive */
                    var imports = directiveNode.Attributes["namespace"];

                    if (!string.IsNullOrEmpty(imports))
                    {
                        result.Add(DirectiveNodeFactory.CreateDirectiveNode("using", directiveNode.Attributes["namespace"]));
                    }
                }

                if (directiveNode.Attributes.ContainsKey("masterpagefile"))
                {
                    var inheritsFrom = directiveNode.Attributes["masterpagefile"];

                    if (inheritsFrom.Contains("~/Fusion/Common/Master.master"))
                    {
                        result.Add(new RazorTextNode(Environment.NewLine + "@{Layout=\"~/Fusion/X/Master.cshtml\";}"));
                    }
                }
            }

            return(result);
        }
        public bool CanConvertNode(IWebFormsNode node)
        {
            var serverControlNode = node as IWebFormsServerControlNode;

            if (serverControlNode != null)
            {
                var tagName = serverControlNode.TagName.ToLowerInvariant();
                return(tagName == "asp:content" || tagName == "asp:contentplaceholder");
            }
            else
            {
                return(false);
            }
        }
示例#16
0
        private void AppendTextNode(IWebFormsNode parentNode, Match match)
        {
            var currentTextNode = parentNode.Children.LastOrDefault() as IWebFormsTextNode;

            if (currentTextNode == null)
            {
                currentTextNode = (IWebFormsTextNode)NodeFactory.CreateNode(match, NodeType.Text);
                parentNode.Children.Add(currentTextNode);
            }
            else
            {
                currentTextNode.Text += match.Value;
            }
        }
示例#17
0
        public bool CanConvertNode(IWebFormsNode node)
        {
            var serverControlNode = node as IWebFormsServerControlNode;

            if (serverControlNode == null)
            {
                return(false);
            }

            //|| serverControlNode.TagName.ToLowerInvariant() == "asp:contentplaceholder"

            var z = serverControlNode.TagName.ToLowerInvariant() == "asp:content";

            return(z);
        }
        public IList<IWebFormsNode> Filter(IWebFormsNode node, IWebFormsNode previousFilteredNode)
        {
            var isCodeGroupNode = node is IWebFormsCodeGroupNode;
            var isCompleteCodeNode = node is IWebFormsCodeBlockNode && ((IWebFormsCodeBlockNode)node).BlockType == CodeBlockNodeType.Complete;
            if (isCodeGroupNode || isCompleteCodeNode)
            {
                var codeContentNode = node as IWebFormsContentNode;
                if (codeContentNode != null && RequiresBlock(codeContentNode.Content))
                {
                    codeContentNode.Content = string.Format("{{{0}}}", codeContentNode.Content);
                }
            }

            return new IWebFormsNode[] { node };
        }
示例#19
0
        public IList <IWebFormsNode> Filter(IWebFormsNode node, IWebFormsNode previousFilteredNode)
        {
            var isCodeGroupNode    = node is IWebFormsCodeGroupNode;
            var isCompleteCodeNode = node is IWebFormsCodeBlockNode && ((IWebFormsCodeBlockNode)node).BlockType == CodeBlockNodeType.Complete;

            if (isCodeGroupNode || isCompleteCodeNode)
            {
                var codeContentNode = node as IWebFormsContentNode;
                if (codeContentNode != null && RequiresBlock(codeContentNode.Content))
                {
                    codeContentNode.Content = string.Format("{{{0}}}", codeContentNode.Content);
                }
            }

            return(new IWebFormsNode[] { node });
        }
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode     = node as IWebFormsExpressionBlockNode;
            var isMultiline = srcNode.Expression.Contains("\r") ||
                              srcNode.Expression.Contains("\n") ||
                              DoesExpressionContainsComplexLogic(srcNode);
            var expression = srcNode.Expression.Trim(new char[] { ' ', '\t' });

            expression = expression.Replace("ResolveUrl", "Url.Content");
            expression = RemoveHtmlEncode(expression);
            expression = WrapHtmlDecode(expression);
            return(new IRazorNode[]
            {
                ExpressionNodeFactory.CreateExpressionNode(expression, isMultiline)
            });
        }
        private IWebFormsCodeGroupNode FindLastOpenGroup(IWebFormsNode previousFilteredNode)
        {
            var groupNode = previousFilteredNode as IWebFormsCodeGroupNode;
            if (groupNode != null)
            {
                var codeBlocks = groupNode.Children.Where(c => c is IWebFormsCodeBlockNode);
                var openingBlocks = codeBlocks.Count(c => ((IWebFormsCodeBlockNode)c).BlockType == CodeBlockNodeType.Opening);
                var closingBlocks = codeBlocks.Count(c => ((IWebFormsCodeBlockNode)c).BlockType == CodeBlockNodeType.Closing);

                if (openingBlocks > 0 && openingBlocks != closingBlocks)
                {
                    return groupNode;
                }
            }

            return null;
        }
示例#22
0
        private IWebFormsCodeGroupNode FindLastOpenGroup(IWebFormsNode previousFilteredNode)
        {
            var groupNode = previousFilteredNode as IWebFormsCodeGroupNode;

            if (groupNode != null)
            {
                var codeBlocks    = groupNode.Children.Where(c => c is IWebFormsCodeBlockNode);
                var openingBlocks = codeBlocks.Count(c => ((IWebFormsCodeBlockNode)c).BlockType == CodeBlockNodeType.Opening);
                var closingBlocks = codeBlocks.Count(c => ((IWebFormsCodeBlockNode)c).BlockType == CodeBlockNodeType.Closing);

                if (openingBlocks > 0 && openingBlocks != closingBlocks)
                {
                    return(groupNode);
                }
            }

            return(null);
        }
示例#23
0
        private void FilterChildNodes(IWebFormsNode rootNode, IWebFormsNodeFilter filter)
        {
            if (rootNode.Children.Count > 0)
            {
                var filterOutput = new List <IWebFormsNode>();
                foreach (var childNode in rootNode.Children)
                {
                    FilterChildNodes(childNode, filter);
                    filterOutput.AddRange(filter.Filter(childNode, filterOutput.LastOrDefault()));
                }

                rootNode.Children.Clear();
                foreach (var filteredNode in filterOutput)
                {
                    rootNode.Children.Add(filteredNode);
                }
            }
        }
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var srcNode     = node as IWebFormsExpressionBlockNode;
            var isMultiline = srcNode.Expression.Contains("\r") || srcNode.Expression.Contains("\n");
            var expression  = srcNode.Expression.Trim(new char[] { ' ', '\t' });

            expression = expression.Replace("ResolveUrl", "Url.Content");
            expression = RemoveHtmlEncode(expression);
            expression = WrapHtmlDecode(expression);

            foreach (var codeConverter in _converters)
            {
                expression = codeConverter.ConvertCodeBlock(expression);
            }
            return(new IRazorNode[]
            {
                ExpressionNodeFactory.CreateExpressionNode(expression, isMultiline)
            });
        }
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var result = new List <IRazorNode>();

            foreach (var childNode in node.Children)
            {
                foreach (var converter in NodeConverterProvider.NodeConverters)
                {
                    if (converter.CanConvertNode(childNode))
                    {
                        foreach (var convertedChildNode in converter.ConvertNode(childNode))
                        {
                            result.Add(convertedChildNode);
                        }
                    }
                }
            }

            return(result);
        }
示例#26
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var result = new List <IRazorNode>();

            var directiveNode = node as IWebFormsDirectiveNode;

            if (directiveNode != null)
            {
                if (directiveNode.Attributes.ContainsKey("inherits"))
                {
                    var inheritsFrom        = directiveNode.Attributes["inherits"];
                    var viewPageGenericType = new Regex("System.Web.Mvc.(?:ViewPage|ViewUserControl)<(?<type>.*)>");
                    var typeMatch           = viewPageGenericType.Match(inheritsFrom);
                    if (typeMatch.Success)
                    {
                        result.Add(DirectiveNodeFactory.CreateDirectiveNode("model", typeMatch.Result("${type}")));
                    }
                    else if (inheritsFrom != "System.Web.Mvc.ViewPage" && inheritsFrom != "System.Web.Mvc.ViewUserControl")
                    {
                        result.Add(DirectiveNodeFactory.CreateDirectiveNode("inherits", directiveNode.Attributes["inherits"]));
                    }
                }
                else if (directiveNode.Attributes.ContainsKey("namespace") &&
                         directiveNode.Directive == DirectiveType.Import)
                {
                    /* Case of of a using directive */
                    var imports = directiveNode.Attributes["namespace"];

                    if (!string.IsNullOrEmpty(imports))
                    {
                        result.Add(DirectiveNodeFactory.CreateDirectiveNode("using", directiveNode.Attributes["namespace"]));
                    }
                }
            }

            return(result);
        }
        public IList<IWebFormsNode> Filter(IWebFormsNode node, IWebFormsNode previousFilteredNode)
        {
            var codeNode = node as IWebFormsCodeBlockNode;
            var lastGroup = FindLastOpenGroup(previousFilteredNode);
            var result = new List<IWebFormsNode>();

            if (lastGroup != null)
            {
                lastGroup.Children.Add(node);
            }
            else
            {
                if (codeNode != null && codeNode.BlockType == CodeBlockNodeType.Opening)
                {
                    result.Add(MultiPartNodeFactory.CreatCodeGroupNode(codeNode));
                }
                else
                {
                    result.Add(node);
                }
            }

            return result;
        }
示例#28
0
        public IList <IRazorNode> ConvertNode(IWebFormsNode node)
        {
            var result = new List <IRazorNode>();

            var directiveNode = node as IWebFormsDirectiveNode;

            if (directiveNode != null &&
                directiveNode.Attributes.ContainsKey("inherits"))
            {
                var inheritsFrom        = directiveNode.Attributes["inherits"];
                var viewPageGenericType = new Regex("System.Web.Mvc.(?:ViewPage|ViewUserControl)<(?<type>.*)>");
                var typeMatch           = viewPageGenericType.Match(inheritsFrom);
                if (typeMatch.Success)
                {
                    result.Add(DirectiveNodeFactory.CreateDirectiveNode("model", typeMatch.Result("${type}")));
                }
                else if (inheritsFrom != "System.Web.Mvc.ViewPage" && inheritsFrom != "System.Web.Mvc.ViewUserControl")
                {
                    result.Add(DirectiveNodeFactory.CreateDirectiveNode("inherits", directiveNode.Attributes["inherits"]));
                }
            }

            return(result);
        }
示例#29
0
        public IList <IWebFormsNode> Filter(IWebFormsNode node, IWebFormsNode previousFilteredNode)
        {
            var codeNode  = node as IWebFormsCodeBlockNode;
            var lastGroup = FindLastOpenGroup(previousFilteredNode);
            var result    = new List <IWebFormsNode>();

            if (lastGroup != null)
            {
                lastGroup.Children.Add(node);
            }
            else
            {
                if (codeNode != null && codeNode.BlockType == CodeBlockNodeType.Opening)
                {
                    result.Add(MultiPartNodeFactory.CreatCodeGroupNode(codeNode));
                }
                else
                {
                    result.Add(node);
                }
            }

            return(result);
        }
 public bool CanConvertNode(IWebFormsNode node)
 {
     return(node is IWebFormsTextNode);
 }
示例#31
0
        private void FilterChildNodes(IWebFormsNode rootNode, IWebFormsNodeFilter filter)
        {
            if (rootNode.Children.Count > 0)
            {
                var filterOutput = new List<IWebFormsNode>();
                foreach (var childNode in rootNode.Children)
                {
                    FilterChildNodes(childNode, filter);
                    filterOutput.AddRange(filter.Filter(childNode, filterOutput.LastOrDefault()));
                }

                rootNode.Children.Clear();
                foreach (var filteredNode in filterOutput)
                {
                    rootNode.Children.Add(filteredNode);
                }
            }
        }
示例#32
0
 public bool CanConvertNode(IWebFormsNode node)
 {
     return(node is IWebFormsCodeBlockNode);
 }
示例#33
0
 private void ApplyPostprocessingFilters(IWebFormsNode rootNode)
 {
     foreach (var filter in NodeFilterProvider.Filters)
     {
         FilterChildNodes(rootNode, filter);
     }
 }
示例#34
0
 private void AppendTextNode(IWebFormsNode parentNode, Match match)
 {
     var currentTextNode = parentNode.Children.LastOrDefault() as IWebFormsTextNode;
     if (currentTextNode == null)
     {
         currentTextNode = (IWebFormsTextNode) NodeFactory.CreateNode(match, NodeType.Text);
         parentNode.Children.Add(currentTextNode);
     }
     else
     {
         currentTextNode.Text += match.Value;
     }
 }
        public bool CanConvertNode(IWebFormsNode node)
        {
            var serverControlNode = node as IWebFormsServerControlNode;

            return(serverControlNode != null && serverControlNode.TagName.ToLowerInvariant() == "asp:content");
        }
示例#36
0
        public IDocument <IWebFormsNode> Parse(string input)
        {
            Match match;
            int   startAt = 0;

            var root = new WebFormsNode {
                Type = NodeType.Document
            };
            IWebFormsNode parentNode = root;

            do
            {
                if ((match = textRegex.Match(input, startAt)).Success)
                {
                    AppendTextNode(parentNode, match);
                    startAt = match.Index + match.Length;
                }

                if (startAt != input.Length)
                {
                    if ((match = directiveRegex.Match(input, startAt)).Success)
                    {
                        var directiveNode = NodeFactory.CreateNode(match, NodeType.Directive);
                        parentNode.Children.Add(directiveNode);
                    }
                    else if ((match = commentRegex.Match(input, startAt)).Success)
                    {
                        var commentNode = NodeFactory.CreateNode(match, NodeType.Comment);
                        parentNode.Children.Add(commentNode);
                    }
                    else if ((match = runatServerTagRegex.Match(input, startAt)).Success)
                    {
                        var serverControlNode = NodeFactory.CreateNode(match, NodeType.ServerControl);
                        parentNode.Children.Add(serverControlNode);
                        if (!match.Value.EndsWith("/>"))
                        {
                            parentNode = serverControlNode;
                        }
                    }
                    else if ((match = doctypeRegex.Match(input, startAt)).Success)
                    {
                        AppendTextNode(parentNode, match);
                    }
                    else if ((match = startTagOpeningBracketRegex.Match(input, startAt)).Success)
                    {
                        AppendTextNode(parentNode, match);
                    }
                    else if ((match = endTagRegex.Match(input, startAt)).Success)
                    {
                        var tagName             = match.Groups["tagname"].Captures[0].Value;
                        var serverControlParent = parentNode as IWebFormsServerControlNode;
                        if (serverControlParent != null && tagName.ToLowerInvariant() == serverControlParent.TagName.ToLowerInvariant())
                        {
                            parentNode = parentNode.Parent;
                        }
                        else
                        {
                            AppendTextNode(parentNode, match);
                        }
                    }
                    else if ((match = aspExprRegex.Match(input, startAt)).Success || (match = aspEncodedExprRegex.Match(input, startAt)).Success)
                    {
                        var expressionBlockNode = NodeFactory.CreateNode(match, NodeType.ExpressionBlock);
                        parentNode.Children.Add(expressionBlockNode);
                    }
                    else if ((match = aspCodeRegex.Match(input, startAt)).Success)
                    {
                        var codeBlockNode = NodeFactory.CreateNode(match, NodeType.CodeBlock);
                        parentNode.Children.Add(codeBlockNode);
                    }
                    else if ((match = scriptRegex.Match(input, startAt)).Success) // Relocated to enable processing of <% %> tags within the script block.
                    {
                        AppendTextNode(parentNode, match);
                    }
                    else
                    {
                        throw new Exception(
                                  string.Format("Unrecognized page element: {0}...", input.Substring(startAt, 20)));
                    }

                    startAt = match.Index + match.Length;
                }
            }while (startAt != input.Length);

            ApplyPostprocessingFilters(root);

            return(new Document <IWebFormsNode>(root));
        }
示例#37
0
 public bool CanConvertNode(IWebFormsNode node)
 {
     return(node is IWebFormsExpressionBlockNode);
 }