Ejemplo n.º 1
0
        static List <XamlNode> Parse(XamlReader reader)
        {
            List <XamlNode>          currentList = new List <XamlNode>();
            Stack <List <XamlNode> > stack       = new Stack <List <XamlNode> >();

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                case XamlNodeType.None:
                    break;

                case XamlNodeType.StartObject:
                    XamlObjectNode obj = new XamlObjectNode(reader.Type);
                    currentList.Add(obj);
                    stack.Push(currentList);
                    currentList = obj.Children;
                    break;

                case XamlNodeType.GetObject:
                    XamlGetObjectNode getObject = new XamlGetObjectNode();
                    currentList.Add(getObject);
                    stack.Push(currentList);
                    currentList = getObject.Children;
                    break;

                case XamlNodeType.StartMember:
                    XamlMemberNode member = new XamlMemberNode(reader.Member);
                    currentList.Add(member);
                    stack.Push(currentList);
                    currentList = member.Children;
                    break;

                case XamlNodeType.Value:
                    currentList.Add(new XamlValueNode(reader.Value));
                    break;

                case XamlNodeType.NamespaceDeclaration:
                    currentList.Add(new XamlNamespaceDeclarationNode(reader.Namespace));
                    break;

                case XamlNodeType.EndObject:
                case XamlNodeType.EndMember:
                    currentList = stack.Pop();
                    break;

                default:
                    throw new InvalidOperationException("Invalid value for XamlNodeType");
                }
            }
            if (stack.Count != 0)
            {
                throw new InvalidOperationException("Imbalanced stack");
            }
            return(currentList);
        }
Ejemplo n.º 2
0
		static List<XamlNode> Parse(XamlReader reader)
		{
			List<XamlNode> currentList = new List<XamlNode>();
			Stack<List<XamlNode>> stack = new Stack<List<XamlNode>>();
			while (reader.Read()) {
				switch (reader.NodeType) {
					case XamlNodeType.None:
						break;
					case XamlNodeType.StartObject:
						XamlObjectNode obj = new XamlObjectNode(reader.Type);
						currentList.Add(obj);
						stack.Push(currentList);
						currentList = obj.Children;
						break;
					case XamlNodeType.GetObject:
						XamlGetObjectNode getObject = new XamlGetObjectNode();
						currentList.Add(getObject);
						stack.Push(currentList);
						currentList = getObject.Children;
						break;
					case XamlNodeType.StartMember:
						XamlMemberNode member = new XamlMemberNode(reader.Member);
						currentList.Add(member);
						stack.Push(currentList);
						currentList = member.Children;
						break;
					case XamlNodeType.Value:
						currentList.Add(new XamlValueNode(reader.Value));
						break;
					case XamlNodeType.NamespaceDeclaration:
						currentList.Add(new XamlNamespaceDeclarationNode(reader.Namespace));
						break;
					case XamlNodeType.EndObject:
					case XamlNodeType.EndMember:
						currentList = stack.Pop();
						break;
					default:
						throw new InvalidOperationException("Invalid value for XamlNodeType");
				}
			}
			if (stack.Count != 0)
				throw new InvalidOperationException("Imbalanced stack");
			return currentList;
		}