1 using System.Collections.Generic;
2 using Tizen.NUI.Internals;
4 namespace Tizen.NUI.Xaml
6 internal class NamescopingVisitor : IXamlNodeVisitor
8 readonly Dictionary<INode, INameScope> scopes = new Dictionary<INode, INameScope>();
10 public NamescopingVisitor(HydrationContext context)
12 Values = context.Values;
15 Dictionary<INode, object> Values { get; set; }
17 public TreeVisitingMode VisitingMode => TreeVisitingMode.TopDown;
18 public bool StopOnDataTemplate => false;
19 public bool StopOnResourceDictionary => false;
20 public bool VisitNodeOnDataTemplate => true;
21 public bool SkipChildren(INode node, INode parentNode) => false;
23 public void Visit(ValueNode node, INode parentNode)
25 scopes[node] = scopes[parentNode];
28 public void Visit(MarkupNode node, INode parentNode)
30 scopes[node] = scopes[parentNode];
33 public void Visit(ElementNode node, INode parentNode)
35 var ns = parentNode == null || IsDataTemplate(node, parentNode) || IsStyle(node, parentNode) || IsVisualStateGroupList(node)
42 public void Visit(RootNode node, INode parentNode)
44 var ns = new NameScope();
49 public void Visit(ListNode node, INode parentNode)
51 scopes[node] = scopes[parentNode];
54 static bool IsDataTemplate(INode node, INode parentNode)
56 var parentElement = parentNode as IElementNode;
58 if (parentElement != null && parentElement.Properties.TryGetValue(XmlName._CreateContent, out createContent) &&
59 createContent == node)
64 static bool IsStyle(INode node, INode parentNode)
66 var pnode = parentNode as ElementNode;
67 return pnode != null && pnode.XmlType.Name == "Style";
70 static bool IsVisualStateGroupList(ElementNode node)
72 return node != null && node.XmlType.Name == "VisualStateGroup" && node.Parent is IListNode;