public void ScopeOfXmlnsIsLimited() { var nodes = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'/><x:post/>"); var visitor = new NamespaceVisitor(new VisitorContext()); visitor.Accept(nodes); Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name); Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace); Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace); Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[2]).Name); Assert.AreEqual("", ((ElementNode)visitor.Nodes[2]).Namespace); nodes = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'><x:bar/></x:foo><x:post/>"); visitor = new NamespaceVisitor(new VisitorContext()); visitor.Accept(nodes); Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name); Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace); Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace); Assert.AreEqual("x:bar", ((ElementNode)visitor.Nodes[2]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[2]).Namespace); Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[4]).Name); Assert.AreEqual("", ((ElementNode)visitor.Nodes[4]).Namespace); }
public void AssignNamespaceWithDefaultPrefix() { var nodes = ParseNodes("<foo><quux:bar/></foo>"); var visitor = new NamespaceVisitor(new VisitorContext { Prefix = "quux" }); visitor.Accept(nodes); Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace); Assert.AreEqual("http://sparkviewengine.com/", ((ElementNode)visitor.Nodes[1]).Namespace); }
public void AssignNamespaceToElement() { var nodes = ParseNodes("<foo xmlns:x='http://sparkviewengine.com/x'><x:bar/></foo>"); var visitor = new NamespaceVisitor(new VisitorContext()); visitor.Accept(nodes); Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace); }
public void ElementCanUseXmlnsOnSelf() { var nodes = ParseNodes("<x:foo y:bar='hello' xmlns:x='http://sparkviewengine.com/x' xmlns:y='http://sparkviewengine.com/y'><quux/></foo>"); var visitor = new NamespaceVisitor(new VisitorContext()); visitor.Accept(nodes); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[0]).Namespace); Assert.AreEqual("", ((ElementNode)visitor.Nodes[1]).Namespace); Assert.AreEqual("y:bar", ((ElementNode)visitor.Nodes[0]).Attributes[0].Name); Assert.AreEqual("http://sparkviewengine.com/y", ((ElementNode)visitor.Nodes[0]).Attributes[0].Namespace); }
public override IList <Node> IncludeFile(VisitorContext context, string path, string parse) { var existingPath = context.ViewPath; var directoryPath = Path.GetDirectoryName(context.ViewPath); var relativePath = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); while (relativePath.StartsWith(string.Format("..{0}", Path.DirectorySeparatorChar))) { directoryPath = Path.GetDirectoryName(directoryPath); relativePath = relativePath.Substring(3); } context.ViewPath = Path.Combine(directoryPath, relativePath); var sourceContext = CreateSourceContext(context.ViewPath, context.ViewFolder); switch (parse) { case "text": var encoded = sourceContext.Content .Replace("&", "&") .Replace("<", "<") .Replace(">", ">"); return(new[] { new TextNode(encoded) }); case "html": return(new[] { new TextNode(sourceContext.Content) }); } var position = new Position(sourceContext); var result = _grammar.Nodes(position); if (result.Rest.PotentialLength() != 0) { ThrowParseException(context.ViewPath, position, result.Rest); } context.Paint = context.Paint.Union(result.Rest.GetPaint()); var namespaceVisitor = new NamespaceVisitor(context); namespaceVisitor.Accept(result.Value); var includeVisitor = new IncludeVisitor(context); includeVisitor.Accept(namespaceVisitor.Nodes); context.ViewPath = existingPath; return(includeVisitor.Nodes); }
public override IList <Node> IncludeFile(VisitorContext context, string path, string parse) { string viewPath = context.ViewPath; string directoryName = Path.GetDirectoryName(context.ViewPath); string str3 = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); while (str3.StartsWith(string.Format("..{0}", Path.DirectorySeparatorChar))) { directoryName = Path.GetDirectoryName(directoryName); str3 = str3.Substring(3); } context.ViewPath = Path.Combine(directoryName, str3); SourceContext sourceContext = AbstractSyntaxProvider.CreateSourceContext(context.ViewPath, context.ViewFolder); switch (parse) { case "text": { string text = sourceContext.Content.Replace("&", "&").Replace("<", "<").Replace(">", ">"); return(new TextNode[] { new TextNode(text) }); } case "html": return(new TextNode[] { new TextNode(sourceContext.Content) }); } Position position = new Position(sourceContext); ParseResult <IList <Node> > result = this._grammar.Nodes(position); if (result.Rest.PotentialLength() != 0) { base.ThrowParseException(context.ViewPath, position, result.Rest); } context.Paint = context.Paint.Union <Paint>(result.Rest.GetPaint()); NamespaceVisitor visitor = new NamespaceVisitor(context); visitor.Accept(result.Value); IncludeVisitor visitor2 = new IncludeVisitor(context); visitor2.Accept(visitor.Nodes); context.ViewPath = viewPath; return(visitor2.Nodes); }
public void NestedElementsDontWreckScope() { var nodes = ParseNodes("<x:pre/><x:foo xmlns:x='http://sparkviewengine.com/x'><x:foo><x:foo/></x:foo></x:foo><x:post/>"); var visitor = new NamespaceVisitor(new VisitorContext()); visitor.Accept(nodes); Assert.AreEqual("x:pre", ((ElementNode)visitor.Nodes[0]).Name); Assert.AreEqual("", ((ElementNode)visitor.Nodes[0]).Namespace); Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[1]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[1]).Namespace); Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[2]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[2]).Namespace); Assert.AreEqual("x:foo", ((ElementNode)visitor.Nodes[3]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((ElementNode)visitor.Nodes[3]).Namespace); Assert.AreEqual("x:foo", ((EndElementNode)visitor.Nodes[4]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((EndElementNode)visitor.Nodes[4]).Namespace); Assert.AreEqual("x:foo", ((EndElementNode)visitor.Nodes[5]).Name); Assert.AreEqual("http://sparkviewengine.com/x", ((EndElementNode)visitor.Nodes[5]).Namespace); Assert.AreEqual("x:post", ((ElementNode)visitor.Nodes[6]).Name); Assert.AreEqual("", ((ElementNode)visitor.Nodes[6]).Namespace); }
public override IList<Node> IncludeFile(VisitorContext context, string path, string parse) { var existingPath = context.ViewPath; var directoryPath = Path.GetDirectoryName(context.ViewPath); var relativePath = path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); while (relativePath.StartsWith(string.Format("..{0}", Path.DirectorySeparatorChar))) { directoryPath = Path.GetDirectoryName(directoryPath); relativePath = relativePath.Substring(3); } context.ViewPath = Path.Combine(directoryPath, relativePath); var sourceContext = CreateSourceContext(context.ViewPath, context.ViewFolder); switch (parse) { case "text": var encoded = sourceContext.Content .Replace("&", "&") .Replace("<", "<") .Replace(">", ">"); return new[] {new TextNode(encoded)}; case "html": return new[] {new TextNode(sourceContext.Content)}; } var position = new Position(sourceContext); var result = _grammar.Nodes(position); if (result.Rest.PotentialLength() != 0) { ThrowParseException(context.ViewPath, position, result.Rest); } context.Paint = context.Paint.Union(result.Rest.GetPaint()); var namespaceVisitor = new NamespaceVisitor(context); namespaceVisitor.Accept(result.Value); var includeVisitor = new IncludeVisitor(context); includeVisitor.Accept(namespaceVisitor.Nodes); context.ViewPath = existingPath; return includeVisitor.Nodes; }