private SDToken GetSeeRef(XmlDocumentationElement xmlElement) { try { var sdToken = new SDSeeToken(); if (xmlElement.ReferencedEntity != null) { var identifier = xmlElement.ReferencedEntity.DeclaringType != null ? xmlElement.ReferencedEntity.DeclaringType.GetIdentifier() : string.Empty; sdToken.Name = xmlElement.ReferencedEntity.Name; sdToken.Namespace = xmlElement.ReferencedEntity.Namespace; sdToken.DeclaringType = identifier; sdToken.Text = xmlElement.ReferencedEntity.Name; } else { sdToken.Name = xmlElement.GetAttribute("cref"); } return(sdToken); } catch (Exception) { return(null); } }
private SDToken GetSeeRef(XElement xmlElement) { try { var sdToken = new SDSeeToken(); /*if (xmlElement.ReferencedEntity != null) * { * var identifier = xmlElement.ReferencedEntity.DeclaringType != null * ? xmlElement.ReferencedEntity.DeclaringType.GetIdentifier() * : string.Empty; * * sdToken.Name = xmlElement.ReferencedEntity.Name; * sdToken.Namespace = xmlElement.ReferencedEntity.Namespace; * sdToken.DeclaringType = identifier; * sdToken.Text = xmlElement.ReferencedEntity.Name; * } * else * { * sdToken.Name = xmlElement.GetAttribute("cref"); * }*/ return(sdToken); } catch (Exception) { return(null); } }
private SDDocumentation ParseDocumentation(IEnumerable <XElement> docElements, bool multilang = false) { var sdDocumentation = new SDDocumentation(); foreach (var child in docElements) { switch (child.Name.LocalName.ToLower()) { case "typeparam": var typeparamKey = child.Attribute("name")?.Value ?? "typeparam"; if (!sdDocumentation.TypeParams.ContainsKey(typeparamKey)) { sdDocumentation.TypeParams.Add(typeparamKey, ParseContentTokens(child, multilang)); } break; case "param": var paramKey = child.Attribute("name")?.Value ?? "param"; if (!sdDocumentation.Params.ContainsKey(paramKey)) { sdDocumentation.Params.Add(paramKey, ParseContentTokens(child, multilang)); } break; case "exception": var exKey = child.Attribute("cref")?.Value ?? "exception"; if (!sdDocumentation.Exceptions.ContainsKey(exKey)) { sdDocumentation.Exceptions.Add(exKey, ParseContentTokens(child, multilang)); } break; case "summary": sdDocumentation.Summary = ParseContentTokens(child, multilang); break; case "remarks": sdDocumentation.Remarks = ParseContentTokens(child, multilang); break; case "example": sdDocumentation.Example = ParseContentTokens(child, multilang); break; case "returns": AddResultsSection(sdDocumentation.Returns, child, multilang); break; case "seealso": var seeToken = new SDSeeToken(child.ToString()); _seeTokens.Add(seeToken); sdDocumentation.SeeAlsos.Add(seeToken); break; } } return(sdDocumentation); }
private SDTokenList ParseContentTokens(XElement xmlElement, bool multilang) { var content = new SDTokenList(); foreach (var element in xmlElement.Nodes()) { var textElement = element as XText; if (textElement != null) { content.Add(new SDToken { Role = SDTokenRole.Text, Text = element.ToString().Trim() }); } var nodeElement = element as XElement; if (nodeElement != null) { switch (nodeElement.Name.LocalName.ToLower()) { case "see": var seeToken = new SDSeeToken(nodeElement.ToString()); _seeTokens.Add(seeToken); content.Add(seeToken); break; case "typeparamref": content.Add(new SDToken { Role = SDTokenRole.TypeParamRef, Text = nodeElement.Attribute("name")?.Value }); break; case "paramref": content.Add(new SDToken { Role = SDTokenRole.ParamRef, Text = nodeElement.Attribute("name")?.Value }); break; case "code": content.Add(new SDCodeToken { Text = nodeElement.Value, IsInline = false }); break; case "c": content.Add(new SDCodeToken { Text = nodeElement.Value, IsInline = true }); break; case "para": content.Add(new SDToken { Text = nodeElement.Value, Role = SDTokenRole.Paragraph }); break; } } } return(content); }
private SDTokenList ParseContentTokens(XElement xmlElement, bool multilang) { var content = new SDTokenList(); foreach (var element in xmlElement.Nodes()) { var textElement = element as XText; if (textElement != null) { var newLines = new[] { "\r\n", "\n" }; var text = element.ToString(); while (true) { foreach (var newLine in newLines) { if (text.StartsWith(newLine)) { text = text.Substring(newLine.Length); } if (text.EndsWith(newLine)) { text = text.Substring(0, text.Length - newLine.Length); } } text = text.Trim(); var shouldBreak = true; foreach (var newLine in newLines) { if (text.StartsWith(newLine) || text.EndsWith(newLine)) { shouldBreak = false; break; } } if (shouldBreak) { // Replace single newline occurrences by a space (this is just a newline in the docs, not a new paragraph) foreach (var newLine in newLines) { text = text.Replace(newLine, " "); } // Remove duplicate spaces that were used for indentation while (text.Contains(" ")) { text = text.Replace(" ", " "); } break; } } content.Add(new SDToken { Role = SDTokenRole.Text, Text = text }); } var nodeElement = element as XElement; if (nodeElement != null) { switch (nodeElement.Name.LocalName.ToLower()) { case "see": var seeToken = new SDSeeToken(nodeElement.ToString()); _seeTokens.Add(seeToken); content.Add(seeToken); break; case "typeparamref": content.Add(new SDToken { Role = SDTokenRole.TypeParamRef, Text = nodeElement.Attribute("name")?.Value }); break; case "paramref": content.Add(new SDToken { Role = SDTokenRole.ParamRef, Text = nodeElement.Attribute("name")?.Value }); break; case "code": var workspace = MSBuildWorkspace.Create(); var formattedResult = Formatter.Format(CSharpSyntaxTree.ParseText(nodeElement.Value, CSharpParseOptions.Default).GetRoot(), workspace); content.Add(new SDCodeToken { Text = formattedResult.ToString(), IsInline = false }); break; case "c": content.Add(new SDCodeToken { Text = nodeElement.Value, IsInline = true }); break; case "para": content.Add(new SDToken { Text = nodeElement.Value, Role = SDTokenRole.Paragraph }); break; } } } return(content); }
private SDTokenList ParseContentTokens(XElement xmlElement, bool multilang) { var content = new SDTokenList(); foreach (var element in xmlElement.Nodes()) { var textElement = element as XText; if (textElement != null) { content.Add(new SDToken { Role = SDTokenRole.Text, Text = element.ToString() }); } var nodeElement = element as XElement; if (nodeElement != null) { switch (nodeElement.Name.LocalName.ToLower()) { case "see": var seeToken = new SDSeeToken(nodeElement.ToString()); _seeTokens.Add(seeToken); content.Add(seeToken); break; case "typeparamref": content.Add(new SDToken { Role = SDTokenRole.TypeParamRef, Text = nodeElement.Attribute("name")?.Value }); break; case "paramref": content.Add(new SDToken { Role = SDTokenRole.ParamRef, Text = nodeElement.Attribute("name")?.Value }); break; case "code": var workspace = MSBuildWorkspace.Create(); var formattedResult = Formatter.Format(CSharpSyntaxTree.ParseText(nodeElement.Value, CSharpParseOptions.Default).GetRoot(), workspace); content.Add(new SDCodeToken { Text = formattedResult.ToString(), IsInline = false }); break; case "c": content.Add(new SDCodeToken { Text = nodeElement.Value, IsInline = true }); break; case "para": content.Add(new SDToken { Text = nodeElement.Value, Role = SDTokenRole.Paragraph }); break; } } } return(content); }