private void AppendExceptionParts(XElement element) { if (_indentions is null) { _indentions = new Dictionary <SymbolDescriptionKind, int>(); } var oldDescription = currentDescription; currentDescription = SymbolDescriptionKind.Exceptions; if (!HasAnyParts) { AppendParts(_provider.CreatePart(SymbolDisplayPartKind.Text, "\r\nExceptions:").Enumerate()); _indentions[SymbolDescriptionKind.Exceptions] = 2; _lineBrokenCount = 1; } foreach (var attribute in element.Attributes()) { AppendAttributeParts(element.Name.LocalName, attribute, XmlNames.CrefAttribute); } _indentWasApplied = false; _lineBrokenCount = 1; ++_indentions[SymbolDescriptionKind.Exceptions]; foreach (var childNode in element.Nodes()) { Parse(childNode); } --_indentions[SymbolDescriptionKind.Exceptions]; _lineBrokenCount = 1; currentDescription = oldDescription; }
public SymbolDescription(SymbolDescriptionKind kind, ImmutableArray <TaggedText> taggedParts) { Kind = kind; TaggedParts = taggedParts.IsDefault ? ImmutableArray <TaggedText> .Empty : taggedParts; }
private void Parse(XNode node) { if (node.NodeType == XmlNodeType.Comment) { return; } if (node is XText text) { AppendParts(_provider.CreatePart(SymbolDisplayPartKind.Text, Normalize(text.Value)).Enumerate()); return; } var element = (node as XDocument)?.Root ?? (XElement)node; var name = element.Name.LocalName; if (name == XmlNames.SummaryElement) { // TODO: does changing description effect on a line breaking? var oldDescription = currentDescription; currentDescription = SymbolDescriptionKind.Additional; foreach (var childNode in element.Nodes()) { Parse(childNode); } currentDescription = oldDescription; return; } if (name == XmlNames.ParaElement) { _lineBrokenCount = 2; foreach (var childNode in element.Nodes()) { Parse(childNode); } _lineBrokenCount = 2; return; } if (name == XmlNames.ExceptionElement) { AppendExceptionParts(element); return; } if (name == XmlNames.SeeElement || name == XmlNames.SeeAlsoElement) { foreach (var attribute in element.Attributes()) { AppendAttributeParts(name, attribute, XmlNames.CrefAttribute); } return; } if (name == XmlNames.ParameterRefElement || name == XmlNames.TypeParameterRefElement) { foreach (var attribute in element.Attributes()) { AppendAttributeParts(name, attribute, XmlNames.NameAttribute); } return; } foreach (var childNode in element.Nodes()) { Parse(childNode); } }