예제 #1
0
        public void SetProjectExtension(XmlElement value)
        {
            AssertCanModify();
            var sr = new StringReader(value.OuterXml);
            var xr = new XmlTextReader(sr);

            xr.MoveToContent();
            var cr = new MSBuildXmlReader {
                XmlReader = xr
            };
            var section = value.LocalName;

            MSBuildXmlElement elem = new MSBuildXmlElement();

            elem.Read(cr);

            int i = ChildNodes.FindIndex(n => (n is MSBuildXmlElement) && ((MSBuildXmlElement)n).Name == section);

            if (i == -1)
            {
                ChildNodes = ChildNodes.Add(elem);
            }
            else
            {
                ChildNodes = ChildNodes.RemoveAt(i);
                ChildNodes = ChildNodes.Insert(i, elem);
            }
            elem.ParentNode = this;
            elem.ResetIndent(false);
            NotifyChanged();
        }
예제 #2
0
        internal override void ReadChildElement(MSBuildXmlReader reader)
        {
            MSBuildObject ob = null;

            switch (reader.LocalName)
            {
            case "ItemGroup": ob = new MSBuildItemGroup(); break;

            case "PropertyGroup": ob = new MSBuildPropertyGroup(); break;

            case "ImportGroup": ob = new MSBuildImportGroup(); break;

            case "Import": ob = new MSBuildImport(); break;

            case "Target": ob = new MSBuildTarget(); break;

            case "Choose": ob = new MSBuildChoose(); break;

            case "ProjectExtensions": ob = new MSBuildProjectExtensions(); break;

            default: ob = new MSBuildXmlElement(); break;
            }
            if (ob != null)
            {
                ob.ParentNode = this;
                ob.Read(reader);
                ChildNodes = ChildNodes.Add(ob);
            }
            else
            {
                base.ReadChildElement(reader);
            }
        }
예제 #3
0
        string ReadValue(MSBuildXmlReader reader)
        {
            if (reader.IsEmptyElement)
            {
                rawValue = EmptyElementMarker;
                reader.Skip();
                return(string.Empty);
            }

            MSBuildXmlElement elem = new MSBuildXmlElement();

            elem.ParentNode = this;
            elem.ReadContent(reader);

            if (elem.ChildNodes.Count == 0)
            {
                StartInnerWhitespace = elem.StartInnerWhitespace;
                EndInnerWhitespace   = elem.EndInnerWhitespace;
                rawValue             = elem.GetInnerXml();
                return(string.Empty);
            }

            if (elem.ChildNodes.Count == 1)
            {
                var node = elem.ChildNodes [0] as MSBuildXmlValueNode;
                if (node != null)
                {
                    StartInnerWhitespace = elem.StartInnerWhitespace;
                    StartInnerWhitespace = MSBuildWhitespace.AppendSpace(StartInnerWhitespace, node.StartWhitespace);
                    EndInnerWhitespace   = node.EndWhitespace;
                    EndInnerWhitespace   = MSBuildWhitespace.AppendSpace(EndInnerWhitespace, elem.EndInnerWhitespace);
                    if (node is MSBuildXmlTextNode)
                    {
                        textValue = node.Value;
                        return(node.Value.Trim());
                    }
                    else if (node is MSBuildXmlCDataNode)
                    {
                        rawValue = "<![CDATA[" + node.Value + "]]>";
                        return(node.Value);
                    }
                }
            }

            if (elem.ChildNodes.Any(n => n is MSBuildXmlElement))
            {
                return(elem.GetInnerXml());
            }
            else
            {
                rawValue = elem.GetInnerXml();
                return(elem.GetText());
            }
        }
예제 #4
0
 internal virtual void ReadChildElement(MSBuildXmlReader reader)
 {
     if (reader.ForEvaluation && !ContentRequiredForEvaluation)
     {
         reader.Skip();
     }
     else
     {
         var n = new MSBuildXmlElement();
         n.Read(reader);
         n.ParentNode = this;
         ChildNodes   = ChildNodes.Add(n);
     }
 }
예제 #5
0
		internal override void ReadChildElement (MSBuildXmlReader reader)
		{
			MSBuildObject ob = null;
			switch (reader.LocalName) {
				case "ItemGroup": ob = new MSBuildItemGroup (); break;
				case "PropertyGroup": ob = new MSBuildPropertyGroup (); break;
				case "ImportGroup": ob = new MSBuildImportGroup (); break;
				case "Choose": ob = new MSBuildChoose (); break;
				default: ob = new MSBuildXmlElement (); break;
			}
			if (ob != null) {
				ob.ParentNode = this;
				ob.Read (reader);
				ChildNodes = ChildNodes.Add (ob);
			} else
				reader.Read ();
		}
예제 #6
0
        internal override void ReadChildElement(MSBuildXmlReader reader)
        {
            MSBuildObject ob = null;

            switch (reader.LocalName)
            {
            case "ItemGroup": ob = new MSBuildItemGroup(); break;

            case "PropertyGroup": ob = new MSBuildPropertyGroup(); break;

            case "ImportGroup": ob = new MSBuildImportGroup(); break;

            case "Choose": ob = new MSBuildChoose(); break;

            default: ob = new MSBuildXmlElement(); break;
            }
            ob.ParentNode = this;
            ob.Read(reader);
            ChildNodes = ChildNodes.Add(ob);
        }
예제 #7
0
        void WriteValue(XmlWriter writer, WriteContext context, string value)
        {
            if (value == null)
            {
                value = string.Empty;
            }

            // This code is from Microsoft.Build.Internal.Utilities

            if (value.IndexOf('<') != -1)
            {
                // If the value looks like it probably contains XML markup ...
                try {
                    var sr   = new StringReader("<a>" + value + "</a>");
                    var elem = new MSBuildXmlElement();
                    using (var xr = new XmlTextReader(sr)) {
                        xr.MoveToContent();
                        var cr = new MSBuildXmlReader {
                            XmlReader = xr
                        };
                        elem.Read(cr);
                    }
                    elem.ParentNode = this;
                    elem.SetNamespace(Namespace);

                    elem.StartWhitespace = StartWhitespace;
                    elem.EndWhitespace   = EndWhitespace;
                    elem.ResetChildrenIndent();
                    elem.WriteContent(writer, context);
                    return;
                }
                catch (XmlException) {
                    // But that may fail, in the event that "value" is not really well-formed
                    // XML.  Eat the exception and fall through below ...
                }
            }

            // The value does not contain valid XML markup.  Write it as text, so it gets
            // escaped properly.
            writer.WriteValue(value);
        }
		public void SetProjectExtension (XmlElement value)
		{
			AssertCanModify ();
			var sr = new StringReader (value.OuterXml);
			var xr = new XmlTextReader (sr);
			xr.MoveToContent ();
			var cr = new MSBuildXmlReader { XmlReader = xr };
			var section = value.LocalName;

			MSBuildXmlElement elem = new MSBuildXmlElement ();
			elem.Read (cr);

			int i = ChildNodes.FindIndex (n => (n is MSBuildXmlElement) && ((MSBuildXmlElement)n).Name == section);
			if (i == -1)
				ChildNodes = ChildNodes.Add (elem);
			else {
				ChildNodes = ChildNodes.RemoveAt (i);
				ChildNodes = ChildNodes.Insert (i, elem);
			}
			elem.ParentNode = this;
			elem.ResetIndent (false);
			NotifyChanged ();
		}
예제 #9
0
		internal virtual void ReadChildElement (MSBuildXmlReader reader)
		{
			if (reader.ForEvaluation)
				reader.Skip ();
			else {
				var n = new MSBuildXmlElement ();
				n.Read (reader);
				n.ParentNode = this;
				ChildNodes = ChildNodes.Add (n);
			}
		}
예제 #10
0
		void WriteValue (XmlWriter writer, WriteContext context, string value)
		{
			if (value == null)
				value = string.Empty;

			// This code is from Microsoft.Build.Internal.Utilities

			if (value.IndexOf('<') != -1) {
				// If the value looks like it probably contains XML markup ...
				try {
					var sr = new StringReader ("<a>"+ value + "</a>");
					var elem = new MSBuildXmlElement ();
					using (var xr = new XmlTextReader (sr)) {
						xr.MoveToContent ();
						var cr = new MSBuildXmlReader { XmlReader = xr };
						elem.Read (cr);
					}
					elem.ParentNode = this;
					elem.SetNamespace (MSBuildProject.Schema);

					elem.StartWhitespace = StartWhitespace;
					elem.EndWhitespace = EndWhitespace;
					elem.ResetChildrenIndent ();
					elem.WriteContent (writer, context);
					return;
				}
				catch (XmlException) {
					// But that may fail, in the event that "value" is not really well-formed
					// XML.  Eat the exception and fall through below ...
				}
			}

			// The value does not contain valid XML markup.  Write it as text, so it gets 
			// escaped properly.
			writer.WriteValue (value);
		}
예제 #11
0
		string ReadValue (MSBuildXmlReader reader)
		{
			if (reader.IsEmptyElement) {
				rawValue = EmptyElementMarker;
				reader.Skip ();
				return string.Empty;
			}

			MSBuildXmlElement elem = new MSBuildXmlElement ();
			elem.ParentNode = this;
			elem.ReadContent (reader);

			if (elem.ChildNodes.Count == 0) {
				StartInnerWhitespace = elem.StartInnerWhitespace;
				EndInnerWhitespace = elem.EndInnerWhitespace;
				rawValue = elem.GetInnerXml ();
				return string.Empty;
			}

			if (elem.ChildNodes.Count == 1) {
				var node = elem.ChildNodes [0] as MSBuildXmlValueNode;
				if (node != null) {
					StartInnerWhitespace = elem.StartInnerWhitespace;
					StartInnerWhitespace = MSBuildWhitespace.AppendSpace (StartInnerWhitespace, node.StartWhitespace);
					EndInnerWhitespace = node.EndWhitespace;
					EndInnerWhitespace = MSBuildWhitespace.AppendSpace (EndInnerWhitespace, elem.EndInnerWhitespace);
					if (node is MSBuildXmlTextNode) {
						textValue = node.Value;
						return node.Value.Trim ();
					} else if (node is MSBuildXmlCDataNode) {
						rawValue = "<![CDATA[" + node.Value + "]]>";
						return node.Value;
					}
				}
			}

			if (elem.ChildNodes.Any (n => n is MSBuildXmlElement))
				return elem.GetInnerXml ();
			else {
				rawValue = elem.GetInnerXml ();
				return elem.GetText ();
			}
		}