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 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; }
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; }