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); }
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; }