Example #1
0
        public override void WriteStartMember(XamlMember property)
        {
            var propertyNode = new XamlDomMember(property);

            // Only need to set the SchemaContext if it's a XamlDirective
            if (property.IsDirective)
            {
                propertyNode.SchemaContext = SchemaContext;
            }

            if (RootNode != null)
            {
                var objectNode = (XamlDomObject)writerStack.Peek();

                objectNode.MemberNodes.Add(propertyNode);
            }
            else
            {
                RootNode = propertyNode;
            }
            propertyNode.StartLineNumber   = _lineNumber;
            propertyNode.StartLinePosition = _linePosition;

            writerStack.Push(propertyNode);
        }
Example #2
0
        private IEnumerable <XamlNode> WalkDom(XamlDomNode domNode)
        {
            var objectNode = domNode as XamlDomObject;

            if (objectNode != null)
            {
                foreach (var node in ReadObjectNode(objectNode))
                {
                    yield return(node);
                }
            }
            else
            {
                var memberNode = domNode as XamlDomMember;
                if (memberNode != null)
                {
                    foreach (var node in ReadMemberNode(memberNode))
                    {
                        yield return(node);
                    }
                }
                else
                {
                    foreach (var node in ReadValueNode(domNode as XamlDomValue))
                    {
                        yield return(node);
                    }
                }
            }
        }
Example #3
0
        public XamlDomReader(XamlDomNode domNode, XamlSchemaContext schemaContext, XamlDomReaderSettings settings)
        {
            if (schemaContext == null)
            {
                throw new ArgumentNullException("schemaContext");
            }
            if (domNode == null)
            {
                throw new ArgumentNullException("domNode");
            }

            SchemaContext = schemaContext;
            if (settings != null)
            {
                _doNotReorder = settings.DoNotReorderMembers;
            }
            _nodes = WalkDom(domNode).GetEnumerator();
        }
Example #4
0
        private void WriteObject(XamlType xamlType, bool isGetObject)
        {
            var objectNode = isGetObject ? new XamlDomObject() : new XamlDomObject(xamlType);

            objectNode.IsGetObject       = isGetObject;
            objectNode.StartLinePosition = _linePosition;
            objectNode.StartLineNumber   = _lineNumber;

            // If it's a GetObject or a Directive, we need to store the actual XamlSchemaContext
            if (objectNode.IsGetObject || objectNode.Type.SchemaContext == XamlLanguage.Object.SchemaContext)
            {
                objectNode.SchemaContext = SchemaContext;
            }

            if (_namespaces != null)
            {
                foreach (var xdns in _namespaces)
                {
                    objectNode.Namespaces.Add(xdns);
                }

                _namespaces.Clear();
            }

            // If Root Node is null then this is the root node.
            // If Root Node is not null, then add this to the parent member.

            if (RootNode == null)
            {
                RootNode = objectNode;
            }
            else
            {
                var propertyNode = (XamlDomMember)writerStack.Peek();
                propertyNode.Items.Add(objectNode);
                objectNode.Parent = propertyNode;
                if (isGetObject)
                {
                    objectNode.Type = propertyNode.Member.Type;
                }
            }
            writerStack.Push(objectNode);
        }
Example #5
0
        public override void WriteValue(object value)
        {
            var valueNode = new XamlDomValue();

            valueNode.Value = value;

            if (RootNode != null)
            {
                //text should always be inside of a property...
                var propertyNode = (XamlDomMember)writerStack.Peek();
                propertyNode.Items.Add(valueNode);
            }
            else
            {
                RootNode = valueNode;
            }

            valueNode.StartLineNumber   = _lineNumber;
            valueNode.StartLinePosition = _linePosition;
            valueNode.EndLineNumber     = _lineNumber;
            valueNode.EndLinePosition   = _linePosition;
        }
Example #6
0
 public XamlNodeCollection(XamlDomNode parent)
 {
     _parentNode = parent;
 }
Example #7
0
 public XamlDomReader(XamlDomNode domNode, XamlSchemaContext schemaContext)
     : this(domNode, schemaContext, null)
 {
 }