/// <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 ConstructParameter(MarkdownBuilder mb, string FullName, Dictionary <string, string> parameterPairs, bool breakLineIndex, int number) { var MethodName = FullName.Substring(0, FullName.IndexOf(" ")); var ParamName = string.Empty; if (number == 1) { ParamName = FullName.Substring(FullName.IndexOf(" ")); } else { int index = Extensions.IndexOfNth(FullName, "<br>", number - 1); ParamName = FullName.Substring(index + 4); } var ParameterTypeBegin = ParamName; if (ParamName.IndexOf("[") > 0) { ParamName = ParamName.Substring(0, ParamName.IndexOf("[")).Trim(); } var methodAndParamName = MethodName + " " + ParamName; var ParameterComment = parameterPairs.FirstOrDefault(x => x.Key == methodAndParamName).Value; var BreakLineIndex = 0; if (ParameterComment != null) { ParamName = Cleaner.BoldName(ParamName); var ParameterType = ParameterTypeBegin.Substring(ParameterTypeBegin.IndexOf("[")); BreakLineIndex = ParameterType.IndexOf("<br>"); if (BreakLineIndex > 0) { ParameterType = ParameterType.Substring(0, BreakLineIndex); } ParameterComment = Regex.Replace(ParameterComment, @"<see cref=""\w:([^\""]*)""\s*\/>", m => VSDocParser.ResolveSeeElement(m, "")); if (breakLineIndex) { mb.Append(ParamName + " " + ParameterType + "<br>" + ParameterComment + "<br><br>"); } else { mb.Append(ParamName + " " + ParameterType + "<br>" + ParameterComment); } } }