/// <summary> /// In default theme this returns only "" /// </summary> /// <param name="item">The item to build a page with</param> /// <returns>An empty string</returns> public string BuildPage(MarkdownMethod item) { if (!_options.BuildMethodPages) { return(""); } return(_methodBuilder.BuildPage(item)); }
/// <summary> /// Cleans a method and adds the appropiate links /// </summary> /// <param name="currentItem">The current markdown item containing the method to be cleaned</param> /// <param name="method">The method to be cleaned</param> /// <param name="useFullName">Determine if full name of method should be shown</param> /// <param name="useParameterNames">Determines if parameter names should be shown</param> /// <param name="parameterList">Determines if parameter names should be listed vertically</param> /// <returns>The cleaned string</returns> public static string CreateFullMethodWithLinks(IMarkdownItem currentItem, MarkdownMethod method, bool useFullName, bool useParameterNames, bool parameterList) { var parameters = method.InternalItem.GetParameters(); MarkdownBuilder mb = new MarkdownBuilder(); if (!parameterList) { if (method.FileName != null) { mb.Link(method.Name, currentItem.To(method)); } else { mb.Append(method.Name); } mb.Append(" ("); } if (parameters.Length > 0) { StringBuilder sb = new StringBuilder(); for (var i = 0; i < parameters.Length; i++) { var type = parameters[i].ParameterType; var link = CreateFullTypeWithLinks(currentItem, type, useFullName, true); if (link.IndexOf('&') > 0) { link = link.Replace("&", ""); sb.Append("out "); } if (!parameterList) { sb.Append(link); if (useParameterNames) { sb.Append($" {parameters[i].Name}"); } } else { if (useParameterNames) { sb.Append($" {parameters[i].Name}"); } sb.Append(link); } if (!parameterList) { if (i + 1 != parameters.Length) { sb.Append(", "); } } else { if (i + 1 != parameters.Length) { sb.Append("<br>"); } } } mb.Append(sb.ToString()); } if (!parameterList) { mb.Append(")"); } return(mb.ToString()); }
private bool MethodCommentFilter(XmlDocumentComment comment, MarkdownMethod method) { return(method.InternalItem.IsMatchOnMethod(comment)); }
/// <summary> /// Builds the markdown method page content /// </summary> /// <param name="item">The markdown method item</param> /// <returns>The markdown content</returns> public string BuildPage(MarkdownMethod item) { Dictionary <string, string> parameterPairs = new Dictionary <string, string>(); Dictionary <string, string> returnPairs = new Dictionary <string, string>(); XmlDocumentComment[] comments = new XmlDocumentComment[0]; MarkdownBuilder mb = new MarkdownBuilder(); var name = Cleaner.CreateFullMethodWithLinks(item, item.As <MarkdownMethod>(), false, true, true); // method name + params name with type var FullName = item.Name + name; var typeZeroHeaders = new[] { "Return", "Name" }; mb.HeaderWithLink(1, item.FullName, item.To(item)); mb.AppendLine(); mb.AppendLine(item.Summary); BuildTable(mb, item, typeZeroHeaders, item); mb.Append("#### Parameters"); mb.AppendLine(); if (File.Exists(MarkdownItemBuilder.xmlPath)) { comments = VSDocParser.ParseXmlParameterComment(XDocument.Parse(File.ReadAllText(MarkdownItemBuilder.xmlPath)), ""); foreach (var comment in comments) { foreach (var param in item.Parameters) { var foundParameterComment = comment.Parameters.FirstOrDefault(x => x.Key == param.Name).Value; if (foundParameterComment != null) { foundParameterComment = foundParameterComment.Substring(0, foundParameterComment.LastIndexOf('<')); foundParameterComment = foundParameterComment.Substring(foundParameterComment.IndexOf('>') + 1); var MethodName = Cleaner.CleanName(comment.MemberName, false, false); // method name + param name + parameter summary if (!parameterPairs.ContainsKey(MethodName + " " + param.Name)) { parameterPairs.Add(MethodName + " " + param.Name, foundParameterComment); } } } } } var numberOfParameters = item.Parameters.Length; for (int i = 1; i <= numberOfParameters; i++) { if (i == numberOfParameters) { ConstructParameter(mb, FullName, parameterPairs, false, i); } else { ConstructParameter(mb, FullName, parameterPairs, true, i); } } mb.AppendLine(); mb.Append("#### Returns"); mb.AppendLine(); Type lookUpType = null; if (item.ItemType == MarkdownItemTypes.Method) { lookUpType = item.As <MarkdownMethod>().ReturnType; } var returned = Cleaner.CreateFullTypeWithLinks(item, lookUpType, false, false); string foundReturnComment = string.Empty; if (File.Exists(MarkdownItemBuilder.xmlPath)) { comments = VSDocParser.ParseXmlComment(XDocument.Parse(File.ReadAllText(MarkdownItemBuilder.xmlPath)), ""); if (comments != null) { foreach (var k in comments) { k.MemberName = Cleaner.CleanName(k.MemberName, false, false); returnPairs[k.MemberName] = k.Returns; } foundReturnComment = returnPairs.FirstOrDefault(x => x.Key == item.Name).Value; } } foundReturnComment = Regex.Replace(foundReturnComment, @"<see cref=""\w:([^\""]*)""\s*\/>", m => VSDocParser.ResolveSeeElement(m, "")); Console.WriteLine(returned); Console.WriteLine(foundReturnComment); mb.Append(returned); mb.AppendLine("<br>"); mb.Append(foundReturnComment); return(mb.ToString()); }
private void BuildTable(MarkdownBuilder mb, IMarkdownItem item, string[] headers, MarkdownMethod mdType) { mb.AppendLine(); List <string[]> data = new List <string[]>(); string[] dataValues = new string[headers.Length]; Type lookUpType = null; if (item.ItemType == MarkdownItemTypes.Method) { lookUpType = item.As <MarkdownMethod>().ReturnType; } dataValues[0] = Cleaner.CreateFullTypeWithLinks(mdType, lookUpType, false, false); string name = item.FullName; if (item.ItemType == MarkdownItemTypes.Method) { name = Cleaner.CreateFullMethodWithLinks(mdType, item.As <MarkdownMethod>(), false, true, false); } else if (item.ItemType == MarkdownItemTypes.Property) { name = Cleaner.CreateFullParameterWithLinks(mdType, item.As <MarkdownProperty>(), false, _options.ShowParameterNames); } else if (item.ItemType == MarkdownItemTypes.Constructor) { name = Cleaner.CreateFullConstructorsWithLinks(mdType, item.As <MarkdownConstructor>(), false, _options.BuildConstructorPages); } dataValues[1] = name; data.Add(dataValues); mb.Table(headers, data, true); mb.AppendLine(); }