コード例 #1
0
        XamlOutlineNode BuildNode(NodeWrapper item)
        {
            XamlOutlineNode node = new XamlOutlineNode()
            {
                Name        = item.Name,
                ElementName = item.ElementName,
                Marker      = editor.Document.CreateAnchor(Utils.MinMax(item.StartOffset, 0, editor.Document.TextLength - 1)),
                EndMarker   = editor.Document.CreateAnchor(Utils.MinMax(item.EndOffset, 0, editor.Document.TextLength - 1)),
                Editor      = editor
            };

            foreach (var child in item.Children)
            {
                node.Children.Add(BuildNode(child));
            }

            return(node);
        }
コード例 #2
0
        public override void VisitElement(AXmlElement element)
        {
            AXmlTag tag = element.Children.FirstOrDefault() as AXmlTag;

            if (tag != null && tag.IsStartOrEmptyTag)
            {
                NodeWrapper node = new NodeWrapper()
                {
                    ElementName = element.LocalName,
                    StartOffset = element.StartOffset,
                    EndOffset   = element.EndOffset,
                    Name        = element.GetAttributeValue("Name") ?? element.GetAttributeValue(CompletionDataHelper.XamlNamespace, "Name"),
                    Children    = new List <NodeWrapper>()
                };

                if (CompilationUnit.TreeRootNode == null)
                {
                    CompilationUnit.TreeRootNode = node;
                    nodeStack.Push(CompilationUnit.TreeRootNode);
                }
                else
                {
                    if (nodeStack.Count > 0)
                    {
                        nodeStack.Peek().Children.Add(node);
                    }
                    if (!tag.IsEmptyTag)
                    {
                        nodeStack.Push(node);
                    }
                }
            }

            base.VisitElement(element);

            if (tag != null && tag.IsStartTag)
            {
                nodeStack.PopOrDefault();
            }
        }