/// <summary> /// Creates an XML doc member element. /// </summary> /// <param name="element">The raw XML element to wrap.</param> /// <param name="children">The child XML doc nodes.</param> public XmlDocMember(XmlElement element, IEnumerable<XmlDocNode> children) : base(element, children.Select(Substitute)) { Contract.Requires(element != null); Contract.Requires(children != null); Contract.Requires(Contract.ForAll(children, x => x != null)); _guts = CreateGuts(); }
private GutsData CreateGuts() { var result = new GutsData(); foreach (var child in Children.OfType<XmlDocElement>()) { if (result.TermElement == null && "TERM".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { result.TermElement = child; if (null != result.DescriptionElement) break; } else if (result.DescriptionElement == null && "DESCRIPTION".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { result.DescriptionElement = child; if (null != result.TermElement) break; } } result.TermContents = result.TermElement == null ? EmptyXmlDocNodeList : result.TermElement.Children; result.DescriptionContents = result.DescriptionElement == null ? EmptyXmlDocNodeList : result.DescriptionElement.Children; return result; }
private GutsData CreateGuts() { var result = new GutsData(); var summaryContents = new List<XmlDocNode>(); var returnsContents = new List<XmlDocNode>(); var valueContents = new List<XmlDocNode>(); var remarksElements = new List<XmlDocElement>(); var examplesElements = new List<XmlDocElement>(); var exceptionElements = new List<XmlDocRefElement>(); var permissionElements = new List<XmlDocRefElement>(); var seeAlsoElements = new List<XmlDocRefElement>(); var parameterSummaries = new List<XmlDocNameElement>(); var typeParameterSummaries = new List<XmlDocNameElement>(); var requiresElements = new List<XmlDocContractElement>(); var ensuresElements = new List<XmlDocContractElement>(); var invariantElements = new List<XmlDocContractElement>(); foreach (var child in Children.OfType<XmlDocElement>()) { if ("SUMMARY".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (child.HasChildren) { if (result.FirstSummary == null) result.FirstSummary = child; summaryContents.AddRange(child.Children); } } else if ("RETURNS".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (child.HasChildren) { if (result.FirstReturnsSummary == null) result.FirstReturnsSummary = child; returnsContents.AddRange(child.Children); } } else if ("VALUE".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (child.HasChildren) { if (result.FirstValueSummary == null) result.FirstValueSummary = child; valueContents.AddRange(child.Children); } } else if ("REMARKS".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (child.HasChildren) remarksElements.Add(child); } else if ("EXAMPLE".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (child.HasChildren) examplesElements.Add(child); } else if ("PURE".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (result.PureElement == null) result.PureElement = child; } else if ("INHERITDOC".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (result.Inheritdoc == null) result.Inheritdoc = child; } else if (child is XmlDocMember) { if ("GETTER".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (child.HasChildren && result.Getter == null) result.Getter = (XmlDocMember)child; } else if ("SETTER".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { if (child.HasChildren && result.Setter == null) result.Setter = (XmlDocMember)child; } } else if (child is XmlDocContractElement) { if ("REQUIRES".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { requiresElements.Add((XmlDocContractElement)child); } else if ("ENSURES".Equals(child.Name, StringComparison.OrdinalIgnoreCase) || "ENSURESONTHROW".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { ensuresElements.Add((XmlDocContractElement)child); } else if ("INVARIANT".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) { invariantElements.Add((XmlDocContractElement)child); } } else if (child is XmlDocRefElement) { if ("EXCEPTION".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) exceptionElements.Add((XmlDocRefElement)child); else if ("PERMISSION".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) permissionElements.Add((XmlDocRefElement)child); else if ("SEEALSO".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) seeAlsoElements.Add((XmlDocRefElement)child); } else if (child is XmlDocNameElement) { if ("PARAM".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) parameterSummaries.Add((XmlDocNameElement)child); else if ("TYPEPARAM".Equals(child.Name, StringComparison.OrdinalIgnoreCase)) typeParameterSummaries.Add((XmlDocNameElement)child); } } result.AllSummaryContents = new ReadOnlyCollection<XmlDocNode>(summaryContents.ToArray()); result.AllReturnsSummary = new ReadOnlyCollection<XmlDocNode>(returnsContents.ToArray()); result.AllValueSummary = new ReadOnlyCollection<XmlDocNode>(valueContents.ToArray()); result.RemarksElements = new ReadOnlyCollection<XmlDocElement>(remarksElements.ToArray()); result.ExampleElements = new ReadOnlyCollection<XmlDocElement>(examplesElements.ToArray()); result.ExceptionElements = new ReadOnlyCollection<XmlDocRefElement>(exceptionElements.ToArray()); result.PermissionElements = new ReadOnlyCollection<XmlDocRefElement>(permissionElements.ToArray()); result.SeeAlsoElements = new ReadOnlyCollection<XmlDocRefElement>(seeAlsoElements.ToArray()); result.ParameterSummaries = new ReadOnlyCollection<XmlDocNameElement>(parameterSummaries.ToArray()); result.TypeParameterSummaries = new ReadOnlyCollection<XmlDocNameElement>(typeParameterSummaries.ToArray()); result.RequiresElements = new ReadOnlyCollection<XmlDocContractElement>(requiresElements.ToArray()); result.EnsuresElements = new ReadOnlyCollection<XmlDocContractElement>(ensuresElements.ToArray()); result.InvariantElements = new ReadOnlyCollection<XmlDocContractElement>(invariantElements.ToArray()); return result; }