public bool ProcessNode(XamlReader reader, XamlWriter targetWriter, int currentDepth, IXamlLineInfo readerLineInfo)
 {
     if ((currentDepth == this.Depth) && ((reader.NodeType == XamlNodeType.NamespaceDeclaration) || (reader.NodeType == XamlNodeType.None)))
     {
         this.bufferedNodes.Writer.WriteNode(reader, readerLineInfo);
         reader.Read();
         return(true);
     }
     if ((((reader.NodeType == XamlNodeType.StartObject) && reader.Type.IsGeneric) && ((reader.Type.UnderlyingType != null) && (reader.Type.Name == "PropertyReferenceExtension"))) && (reader.Type.UnderlyingType.GetGenericTypeDefinition() == typeof(PropertyReferenceExtension <>)))
     {
         if (this.bufferedNodes.Count > 0)
         {
             XamlServices.Transform(this.bufferedNodes.Reader, targetWriter, false);
             this.bufferedNodes = null;
         }
         XamlType   type     = reader.Type;
         XamlReader reader2  = reader.ReadSubtree();
         XamlType   xamlType = reader.SchemaContext.GetXamlType(typeof(ActivityBuilder));
         XamlType   type3    = reader.SchemaContext.GetXamlType(typeof(ActivityPropertyReference));
         targetWriter.WriteStartMember(xamlType.GetAttachableMember("PropertyReference"), readerLineInfo);
         reader2.Read();
         targetWriter.WriteStartObject(type3, readerLineInfo);
         targetWriter.WriteStartMember(type3.GetMember("TargetProperty"), readerLineInfo);
         targetWriter.WriteValue(this.currentMember.Name, readerLineInfo);
         targetWriter.WriteEndMember(readerLineInfo);
         bool flag  = reader2.Read();
         bool flag2 = false;
         while (flag)
         {
             if (((reader2.NodeType == XamlNodeType.StartMember) && (reader2.Member.DeclaringType == type)) && (reader2.Member.Name == "PropertyName"))
             {
                 flag2 = true;
             }
             else if (flag2)
             {
                 if (reader2.NodeType == XamlNodeType.EndMember)
                 {
                     flag2 = false;
                 }
                 else if (reader2.NodeType == XamlNodeType.Value)
                 {
                     targetWriter.WriteStartMember(type3.GetMember("SourceProperty"), readerLineInfo);
                     targetWriter.WriteValue((string)reader2.Value, readerLineInfo);
                     targetWriter.WriteEndMember(readerLineInfo);
                 }
             }
             flag = reader2.Read();
         }
         targetWriter.WriteEndObject(readerLineInfo);
         targetWriter.WriteEndMember(readerLineInfo);
         this.ExitObject = true;
         reader2.Close();
     }
     else
     {
         this.FlushBuffer(targetWriter);
         targetWriter.WriteNode(reader, readerLineInfo);
     }
     return(false);
 }
            public void BufferDefinitions(DynamicActivityXamlReader parent)
            {
                XamlReader    reader = parent.innerReader.ReadSubtree();
                IXamlLineInfo innerReaderLineInfo = parent.innerReaderLineInfo;

                reader.Read();
                this.outerNodes.Writer.WriteStartMember(parent.activityReplacementXamlType.GetMember("Properties"), innerReaderLineInfo);
                this.outerNodes.Writer.WriteGetObject(innerReaderLineInfo);
                this.outerNodes.Writer.WriteStartMember(XamlLanguage.Items, innerReaderLineInfo);
                bool flag = reader.Read();

                while (flag)
                {
                    if ((reader.NodeType == XamlNodeType.StartObject) && (reader.Type == XamlLanguage.Property))
                    {
                        ActivityPropertyHolder holder = new ActivityPropertyHolder(parent, reader.ReadSubtree());
                        this.PropertyHolders.Add(holder.Name, holder);
                        this.outerNodes.Writer.WriteValue(holder, innerReaderLineInfo);
                    }
                    else
                    {
                        this.outerNodes.Writer.WriteNode(reader, innerReaderLineInfo);
                        flag = reader.Read();
                    }
                }
                this.outerNodes.Writer.WriteEndObject(innerReaderLineInfo);
                this.outerNodes.Writer.WriteEndMember(innerReaderLineInfo);
                reader.Close();
                this.alreadyBufferedDefinitions = true;
                this.FlushValueHolders(parent);
            }
        private void WriteWrappedMember(bool stripWhitespace)
        {
            this.nodeQueue.Writer.WriteGetObject(this.innerReaderLineInfo);
            this.nodeQueue.Writer.WriteStartMember(XamlLanguage.Items, this.innerReaderLineInfo);
            XamlReader reader = this.innerReader.ReadSubtree();

            reader.Read();
            reader.Read();
            while (!reader.IsEof)
            {
                bool flag = false;
                if (reader.NodeType == XamlNodeType.Value)
                {
                    string str = reader.Value as string;
                    if ((str != null) && (str.Trim().Length == 0))
                    {
                        flag = true;
                    }
                }
                if (flag && stripWhitespace)
                {
                    reader.Read();
                }
                else
                {
                    XamlWriterExtensions.Transform(reader.ReadSubtree(), this.nodeQueue.Writer, this.innerReaderLineInfo, false);
                }
            }
            this.nodeQueue.Writer.WriteEndObject(this.innerReaderLineInfo);
            this.nodeQueue.Writer.WriteEndMember(this.innerReaderLineInfo);
            reader.Close();
            this.ExitObject();
        }
                public void ProcessDefaultValue(XamlMember propertyValue, XamlReader subReader, IXamlLineInfo lineInfo)
                {
                    XamlReader reader;
                    bool       flag = false;

                    subReader.Read();
                    if (!subReader.Member.IsNameValid)
                    {
                        throw FxTrace.Exception.AsError(DynamicActivityXamlReader.CreateXamlException(System.Activities.SR.InvalidXamlMember(subReader.Member.Name), lineInfo));
                    }
                    this.nodes.Writer.WriteStartMember(propertyValue, lineInfo);
                    subReader.Read();
                    if (subReader.NodeType == XamlNodeType.GetObject)
                    {
                        subReader.Read();
                        subReader.Read();
                        reader = subReader.ReadSubtree();
                        reader.Read();
                    }
                    else
                    {
                        reader = subReader;
                    }
                    if ((reader.NodeType != XamlNodeType.EndMember) && (reader.NodeType != XamlNodeType.StartObject))
                    {
                        flag = true;
                        this.nodes.Writer.WriteStartObject(this.Type, lineInfo);
                        this.nodes.Writer.WriteStartMember(XamlLanguage.Initialization, lineInfo);
                    }
                    while (!reader.IsEof)
                    {
                        this.nodes.Writer.WriteNode(reader, lineInfo);
                        reader.Read();
                    }
                    reader.Close();
                    if (!object.ReferenceEquals(reader, subReader))
                    {
                        subReader.Read();
                        while (subReader.Read())
                        {
                            this.nodes.Writer.WriteNode(subReader, lineInfo);
                        }
                    }
                    if (flag)
                    {
                        this.nodes.Writer.WriteEndObject(lineInfo);
                        this.nodes.Writer.WriteEndMember(lineInfo);
                    }
                    subReader.Close();
                }
		protected void Read_ListXmlSerializable (XamlReader r)
		{
			while (true) {
				r.Read ();
				if (r.Member == XamlLanguage.Items)
					break;
				if (r.IsEof)
					Assert.Fail ("Items did not appear");
			}

			// t:XmlSerializable (yes...it is not XData!)
			Assert.IsTrue (r.Read (), "so#1-1");
			Assert.AreEqual (XamlNodeType.StartObject, r.NodeType, "so#1-2");
			var xt = new XamlType (typeof (XmlSerializable), r.SchemaContext);
			Assert.AreEqual (xt, r.Type, "so#1-3");

			// /t:XmlSerializable
			Assert.IsTrue (r.Read (), "eo#1-1");
			Assert.AreEqual (XamlNodeType.EndObject, r.NodeType, "eo#1-2");

			r.Close ();
		}
                public ActivityPropertyHolder(DynamicActivityXamlReader parent, XamlReader reader)
                {
                    this.parent = parent;
                    this.nodes  = new XamlNodeQueue(parent.SchemaContext);
                    IXamlLineInfo innerReaderLineInfo = parent.innerReaderLineInfo;

                    reader.Read();
                    this.nodes.Writer.WriteStartObject(parent.activityPropertyXamlType, innerReaderLineInfo);
                    int  num  = 1;
                    int  a    = 0;
                    int  num3 = 0;
                    bool flag = reader.Read();

                    while (flag)
                    {
                        XamlMember activityPropertyName;
                        switch (reader.NodeType)
                        {
                        case XamlNodeType.StartObject:
                        case XamlNodeType.GetObject:
                        {
                            num++;
                            DynamicActivityXamlReader.IncrementIfPositive(ref a);
                            DynamicActivityXamlReader.IncrementIfPositive(ref num3);
                            if ((num3 <= 0) || !(reader.Type == parent.xamlTypeXamlType))
                            {
                                goto Label_0231;
                            }
                            this.nodes.Writer.WriteStartObject(parent.typeXamlType, innerReaderLineInfo);
                            flag = reader.Read();
                            continue;
                        }

                        case XamlNodeType.EndObject:
                        {
                            num--;
                            if (num != 0)
                            {
                                goto Label_0213;
                            }
                            flag = reader.Read();
                            continue;
                        }

                        case XamlNodeType.StartMember:
                            if (!(reader.Member.DeclaringType == XamlLanguage.Property))
                            {
                                goto Label_0231;
                            }
                            activityPropertyName = reader.Member;
                            if (!(activityPropertyName == DynamicActivityXamlReader.xPropertyName))
                            {
                                break;
                            }
                            activityPropertyName = parent.activityPropertyName;
                            if (a == 0)
                            {
                                a = 1;
                            }
                            goto Label_0115;

                        case XamlNodeType.EndMember:
                            DynamicActivityXamlReader.DecrementIfPositive(ref a);
                            DynamicActivityXamlReader.DecrementIfPositive(ref num3);
                            goto Label_0231;

                        case XamlNodeType.Value:
                            if (a != 1)
                            {
                                goto Label_014F;
                            }
                            this.Name = reader.Value as string;
                            goto Label_0231;

                        default:
                            goto Label_0231;
                        }
                        if (activityPropertyName == DynamicActivityXamlReader.xPropertyType)
                        {
                            activityPropertyName = parent.activityPropertyType;
                            if (num3 == 0)
                            {
                                num3 = 1;
                            }
                        }
                        else
                        {
                            if (activityPropertyName != DynamicActivityXamlReader.xPropertyAttributes)
                            {
                                throw FxTrace.Exception.AsError(DynamicActivityXamlReader.CreateXamlException(System.Activities.SR.PropertyMemberNotSupportedByActivityXamlServices(activityPropertyName.Name), innerReaderLineInfo));
                            }
                            activityPropertyName = parent.activityPropertyAttributes;
                        }
Label_0115:
                        this.nodes.Writer.WriteStartMember(activityPropertyName, innerReaderLineInfo);
                        flag = reader.Read();
                        continue;
Label_014F:
                        if (num3 == 1)
                        {
                            XamlTypeName xamlTypeName = XamlTypeName.Parse(reader.Value as string, parent.namespaceTable);
                            XamlType     xamlType     = parent.SchemaContext.GetXamlType(xamlTypeName);
                            if (xamlType == null)
                            {
                                throw FxTrace.Exception.AsError(DynamicActivityXamlReader.CreateXamlException(System.Activities.SR.InvalidPropertyType(reader.Value as string, this.Name), innerReaderLineInfo));
                            }
                            this.Type = xamlType;
                        }
                        goto Label_0231;
Label_0213:
                        DynamicActivityXamlReader.DecrementIfPositive(ref a);
                        DynamicActivityXamlReader.DecrementIfPositive(ref num3);
Label_0231:
                        this.nodes.Writer.WriteNode(reader, innerReaderLineInfo);
                        flag = reader.Read();
                    }
                    reader.Close();
                }